简体   繁体   中英

MatPlotLib not displaying both graphs when sharing X axes

This is a bit of an odd problem I've encountered. I'm trying to read data from a CSV file in Python, and have the two resulting lines be inside of the same box, with different scales so they're both clear to read.

The CSV file looks like this:

Date,difference,current

11/19/20, 0, 606771

11/20/20, 14612, 621383

and the code looks like this:

data = pd.read_csv('data.csv')
time = data['Time']
ycurr = data['current']
ydif = data['difference']

fig, ax = plt.subplots()
line1, = ax.plot(time, ycurr, label='Current total')
line1.set_dashes([2, 2, 10, 2])  # 2pt line, 2pt break, 10pt line, 2pt break

line2, = ax.twinx().plot(time, ydif, dashes=[6, 2], label='Difference')

ax.legend()
plt.show()

I can display the graphs with the X-axis having Date values and Y-axis having difference values or current values just fine.

However, when I attempt to use subplots() and use the twinx() attribute with the second line, I can only see one of two lines. MatPlotLib Graph 结果仅显示当前总数。

I initially thought this might be a formatting issue in my code, so I updated the code to have the second line be ax2 = ax1.twin(x) and call upon the second line using this, but the result stayed the same. I suspect that this might be an issue with reading in the CSV data? I tried to do read in x = np.linspace(0, 10, 500) y = np.sin(x) y2 = np.sin(x-0.05) instead and that worked: MPL 在这里完美地工作

Everything is working as expected but probably not how you want it to work! So each line only consists of two data points which in the end will give you a linear curve. Both of these curves share the same x-coordinates while the y-axis is scaled for each plot. And here comes the problem, both axes are scaled to display the data in the same way. This means, the curves lie perfectly on top of each other. It is difficult to see because both lines are dashed.
You can see what is going on by changing the colors of the line. For example add color='C1' to one of the curves.
By the way, what do you want to show with your plot? A curve consisting of two data points mostly doesn't show much and you are better of if you just show their values directly instead.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM