Matplotlib: построение нескольких столбцов на фигуре с разными осями y - PullRequest
0 голосов
/ 08 ноября 2018

Я хочу построить фигуру, похожую на эту (извините, она выглядит не очень хорошо):

enter image description here

с данными, скажем, так:

y = np.random.rand(10,3)
y[:,0]= np.arange(1,11)
df = pd.DataFrame(y, columns=["X", "Volume", "Time"])
df

X   Volume  Time
0   1.0 0.517895    0.182525
1   2.0 0.488399    0.252989
2   3.0 0.992292    0.941301
3   4.0 0.147368    0.650542
4   5.0 0.236345    0.662650
5   6.0 0.913300    0.539643
6   7.0 0.373740    0.379043
7   8.0 0.752482    0.875370
8   9.0 0.040096    0.097381
9   10.0    0.793734    0.625026

Кто-нибудь знает, как это сделать? спасибо, я пытаюсь копаться в переполнении стека, но не нашел подобного вопроса. Спасибо за любую идею и предложение !!

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

вот мое решение. На самом деле это довольно просто, после использования ax2 = ax.twinx (), перевернуть диапазон оси ax2 y на ax2.set_ylim (BIG_NUMBER, SMALL_NUMBER)

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

y = np.random.rand(10,3)
y[:,0]= np.arange(1,11)
df = pd.DataFrame(y, columns=['x', 'v', 't'])
df['x'] = np.arange(1, 11, 1)

fig = plt.figure() # Create matplotlib figure

ax = fig.add_subplot(111) # Create matplotlib axes
ax2 = ax.twinx() # Create another axes that shares the same x-axis as ax.


ax.bar(df['x'],df['v'], color='red', alpha=0.8)
ax.set_ylabel('v', color='red')
ax.tick_params(axis='y', labelcolor='red')
ax.set_ylim(0, 1.5)

ax2.bar(df['x'], df['t'], color='blue', alpha=0.5)
ax2.set_ylabel('t', color='b')
ax2.tick_params(axis='y', labelcolor='blue')
ax2.set_ylim(1.5, 0)

plt.show()
0 голосов
/ 08 ноября 2018

Вы ищете это?

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

y = np.random.rand(10,3)
y[:,0]= np.arange(1,11)
df = pd.DataFrame(y, columns=['x', 'v', 't'])

fig = plt.figure() # Create matplotlib figure

ax = fig.add_subplot(111) # Create matplotlib axes
ax2 = ax.twinx() # Create another axes that shares the same x-axis as ax.

width = 0.4

df.plot(x='x',y='v',kind='bar', color='red', ax=ax, width=width, position=1)
df.t.plot(x='x', y='t[::-1]',kind='bar', color='blue', ax=ax2, width=width, position=0)

ax.set_ylabel('v')
ax2.set_ylabel('t')


plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...