DejaVuMan
DejaVuMan

Reputation: 35

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 Result showing only Current total.

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 Working Flawlessly here

Upvotes: 1

Views: 267

Answers (1)

Solvalou
Solvalou

Reputation: 1143

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.

Upvotes: 1

Related Questions