multiple plot in one figure in Python

匿名 (未验证) 提交于 2019-12-03 02:14:01

问题:

I am new to python and am trying to plot multiple lines in the same figure using matplotlib. Value of my Y axis is stored in a dictionary and I make corresponding values in X axis in my following code

My code is like this:

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() 

But I am getting separate figures with single plot one by one. Can anybody help me figure our what is wrong with my code? Why can't I produce multiple line plotting? Thanks a lot!

回答1:

This is very simple to do:

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() 

You can keep adding plt.plot as many times as you like. As for line type, you need to first specify the color. So for blue, it's b. And for a normal line it's -. An example would be:

plt.plot(total_lengths, sort_times_heap, 'b-', label="Heap") 


回答2:

Since I don't have a high enough reputation to comment I'll answer liang question on Feb 20 at 10:01 as an answer to the original question.

In order for the for the line labels to show you need to add plt.legend to your code. to build on the previous example above that also includes title, ylabel and 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() 


回答3:

EDIT: I just realised after reading your question again, that i did not answer your question. You want to enter multiple lines in the same plot. However, I'll leave it be, because this served me very well multiple times. I hope you find usefull someday

I found this a while back when learning 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 

you can make different sizes in one figure as well, use slices in that case:

 gs = gridspec.GridSpec(3, 3)  ax1 = plt.subplot(gs[0,:]) # row 0 (top) spans all(3) columns 

consult the docs for more help and examples. This little bit i typed up for myself once, and is very much based/copied from the docs as well. Hope it helps... I remember it being a pain in the #$% to get acquainted with the slice notation for the different sized plots in one figure. After that i think it's very simple :)



回答4:

The OP states that each plot element overwrites the previous one rather than being combined into a single plot. This can happen even with one of the many suggestions made by other answers. If you select several lines and run them together, say:

plt.plot(<X>, <Y>) plt.plot(<X>, <Z>) 

the plot elements will typically be rendered together, one layer on top of the other. But if you execute the code line-by-line, each plot will overwrite the previous one.

This perhaps is what happened to the OP. It just happened to me: I had set up a new key binding to execute code by a single key press (on spyder), but my key binding was executing only the current line. The solution was to select lines by whole blocks or to run the whole file.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!