【问题标题】:Matplotlib - Several lines on the same plotMatplotlib - 同一情节上的几条线
【发布时间】:2021-12-03 02:19:05
【问题描述】:

我正在将一些旧的 Python 2.7 代码转换为 3.6。 我的例程绘制了第一行,但后续行似乎从上一行停止的地方开始。 (在线运行www.pythonanywhere.com

我的代码:

import matplotlib
from matplotlib import pyplot;

k = 0
while k < len(Stations):

    # Draw the graph
    fig.patch.set_facecolor('black') # Outside border
    pyplot.rcParams['axes.facecolor'] = 'black' # Graph background
    pyplot.rcParams['axes.edgecolor'] = 'red'
    pyplot.tick_params(axis='x', colors='yellow')
    pyplot.tick_params(axis='y', colors='yellow')
    pyplot.ylim(float(BtmLimit),float(TopLimit))
    pyplot.ylabel("Percent of normal range.", size=10, color = "yellow")
    pyplot.xticks([]) # Hide X axis
    pyplot.title("Plotted at %sGMT, %s %s %s" % (thour, tday, tdate, tmonth), color = "yellow")
    if Error == 'False': pyplot.plot(Epoch, Scaled, color = (Color), linewidth=1.9)
    pyplot.plot(Epoch, Top, color = [0,0.5,0]) # Green lines
    pyplot.plot(Epoch, Btm, color = [0,0.5,0])
    k = k + 1

pyplot.savefig(SD+'RiverLevels.png', facecolor='black', bbox_inches='tight')
pyplot.show()
pyplot.close()

数据如下:

时代 ['1638046800', '1638047700', '1638048600', '1638049500', '1638050400', '1638051300', '1638052200', '1638053100', '16380540900', '16380540900', 055800'、'1638056700'、'1638057600'、'1638058500'、'1638059400'、'1638060300'、'1638061200'、'1638062100'、'16380630600'、'163 ', '1638065700', '1638066600', '1638067500', '1638068400', '1638069300', '1638070200', '1638071100', '1638072000', '1638072000', '163808072900', '163808072900'3 38074700', '1638075600', '1638076500', '1638077400', '1638078300', '1638079200', '1638080100', '1638081000', '1638081000', '1638081000', '1638083808830'70','16 00', '1638084600', '1638085500', '1638086400', '1638087300', '1638088200', '1638089100', '1638090000', '1638090900', '1638090900', '1638090900', '163808098'2 1638093600', '1638094500', '1638095400']

缩放 ['32.475247524752476', '33.069306930693074', '33.76237623762376', '33.56435643564357', '33.56435643564357', '33.861386138613587' 6','34.35643564356436','34.554455445544555','34.554455445544555','34.75247524752476','34.95049504950495','35.05495049504'35.054950495049, 48515','35.049504950495056','35.14851485148515','35.44554455445545','35.54455445544555','35.54455445544555','345.346'4'34556. 5544555', '35.64356435643565', '35.84158415841585', '35.742574257425744', '35.54455445544555', '35.44554455445545', '35454545554545454545454'35454 465346535', '35.24752475247525', '35.049504950495056', '34.95049504950495', '34.95049504950495', '34.851485148514854', '34.6', '34.6', '34.6', '34.6', '34.6' 643564356436', '34.15841584158416', '34.35643564356436', '34.35643564356436', '34.25742574257426', '34.05940594059406', '363.88'363.86 63366336633665', '33.86138613861387', '33.663366336633665', '33.663366336633665', '33.46534653465347', '33.3663366335763366',3'5663357663366', '33.663366336633665', '33.663366336633665', '33.663366336633665', '33.663366336633665', '33.960396039603964', '34.05940594.0954'54' 406']

Output image

【问题讨论】:

  • 您能解释一下为什么要使用循环吗?我在 while 循环中找不到您对“k”的用法。看来您可以消除循环。

标签: python matplotlib


【解决方案1】:

我猜这可能是由于使用字符串而不是数字。当您使用字符串时,x 值被视为类别,而不是按数字顺序排列,而是按照它们在列表中出现的顺序排列(除非一个类别完全重复)。我知道 sn-p 不完整,但 EpochScaled 的值实际上在每次迭代时都会发生变化。

在绘制第一组数据后,第一组中不存在的任何值都将位于第一组的“之后”(即:在x 中第一组最后一个点的右侧,并且高于y 的最后一点)。当绘制第二组数据时,前一组数据中没有出现第一个x 值,因此无论它们的数值如何,它们都是在之后绘制的(图中浅蓝色线的开头)。然后,最终的值与第一组中出现的值相同,因此线回到图的左侧。

您可以尝试在图中使用[float(x) for x in Epoch][float(y) for y in Scaled]。我看到字符串中有空格代表数字,你可以使用这样的函数:

def flist_from_slist(data):
   return [float(x.replace(' ', '')) for x in data]

并将 pyplot.plot 调用替换为:

pyplot.plot(flist_from_slist(Epoch), flist_from_slist(Scaled), linewidth=1.9)

此外,循环内有很多代码可以移到外面(设置刻度、标签等)。

【讨论】:

  • 不,你的答案是错误的。您可以传递数字字符串来绘制一条线。 (您可以将其写为评论,并让要求澄清问题的人。)
  • 你是对的,但我还不能发表评论。使用字符串的问题是值被视为类别而不是数字。我想在完整的代码中(sn-p 似乎不完整)EpochScaled 每次迭代都会发生变化,但由于某些类别在不同的图中重复,所以线条来回移动。
  • 谢谢,解决了。最终结果可以在这里看到:[link]boneyard.pythonanywhere.com/RiverScraper/RiverLevels01.htm@azelcer
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-04
  • 2017-02-24
  • 2019-12-28
  • 2020-05-06
  • 1970-01-01
相关资源
最近更新 更多