我是python的新手,我正在尝试使用matplotlib在同一个图中绘制多行。 我的Y轴的值存储在字典中,我在下面的代码中用X轴创建相应的值
我的代码是这样的:
for i in range(len(ID)):
AxisY= PlotPoints[ID[i]]
if len(AxisY)> 5:
AxisX= [len(AxisY)]
for i in range(1,len(AxisY)):
AxisX.append(AxisX[i-1]-1)
plt.plot(AxisX,AxisY)
plt.xlabel('Lead Time (in days)')
plt.ylabel('Proportation of Events Scheduled')
ax = plt.gca()
ax.invert_xaxis()
ax.yaxis.tick_right()
ax.yaxis.set_label_position("right")
plt.show()
但是我逐个单独绘制单独的数字。任何人都可以帮我弄清楚我的代码有什么问题吗?为什么我不能生成多行绘图?非常感谢!
答案 0 :(得分:70)
这很简单:
import matplotlib.pyplot as plt
plt.plot(<X AXIS VALUES HERE>, <Y AXIS VALUES HERE>, 'line type', label='label here')
plt.plot(<X AXIS VALUES HERE>, <Y AXIS VALUES HERE>, 'line type', label='label here')
plt.legend(loc='best')
plt.show()
您可以根据需要多次添加plt.plot
。至于line type
,您需要先指定颜色。所以对于蓝色,它是b
。对于法线,它是-
。一个例子是:
plt.plot(total_lengths, sort_times_heap, 'b-', label="Heap")
答案 1 :(得分:13)
由于我没有足够的声誉来发表评论我会在2月20日10:01回答liang问题,作为对原始问题的回答。
为了让行标签显示您需要将plt.legend添加到您的代码中。 建立在前面的例子上,还包括title,ylabel和xlabel:
import matplotlib.pyplot as plt
plt.plot(<X AXIS VALUES HERE>, <Y AXIS VALUES HERE>, 'line type', label='label here')
plt.plot(<X AXIS VALUES HERE>, <Y AXIS VALUES HERE>, 'line type', label='label here')
plt.title('title')
plt.ylabel('ylabel')
plt.xlabel('xlabel')
plt.legend()
plt.show()
答案 2 :(得分:9)
编辑:我刚刚在再次阅读您的问题后意识到,我没有回答您的问题。您想在同一个图中输入多行。但是,我会留下它,因为这次我很好地服务了我。我希望你有一天能找到有用的东西
我在学习python时发现了一段时间
import matplotlib as plt
import matplotlib.gridspec as gridspec
fig = plt.figure()
# create figure window
gs = gridspec.GridSpec(a, b)
# Creates grid 'gs' of a rows and b columns
ax = plt.subplot(gs[x, y])
# Adds subplot 'ax' in grid 'gs' at position [x,y]
ax.set_ylabel('Foo') #Add y-axis label 'Foo' to graph 'ax' (xlabel for x-axis)
fig.add_subplot(ax) #add 'ax' to figure
你也可以在一个图中制作不同的尺寸,在这种情况下使用切片:
gs = gridspec.GridSpec(3, 3)
ax1 = plt.subplot(gs[0,:]) # row 0 (top) spans all(3) columns
咨询docs以获取更多帮助和示例。这一点点我自己输入了一次,并且非常基于/复制了文档。希望它有所帮助...我记得在一个图中了解不同大小的图的切片表示法是#$%的痛苦。之后,我认为这很简单:)
答案 3 :(得分:0)
OP指出每个绘图元素都会覆盖前一个绘图元素,而不是合并为单个绘图。即使其他答案提出了许多建议之一,也会发生这种情况。如果选择多行并一起运行,请说:
plt.plot(<X>, <Y>)
plt.plot(<X>, <Z>)
绘图元素通常会一起渲染,一层在另一层之上。 但是如果你逐行执行代码,每个图都会覆盖前一个。
这可能是OP发生的事情。它恰好发生在我身上:我已经设置了一个新的键绑定来通过单键按下(spyder
)来执行代码,但我的键绑定只执行当前行。解决方案是按整块选择行或运行整个文件。