#python #matplotlib #plot #data-visualization #multiple-axes
Вопрос:
Я не могу получить два разных масштаба для сюжета:
Я не знаю, как активировать масштаб вторичной оси x.
"STK"
и "Material"
должны отображаться в разных масштабах.
Как отобразить "Material"
его в собственном масштабе (0,максимум), как это было сделано автоматически "STK"
?
Мне нужно, чтобы он отображался, как на изображении ниже :
Вот код:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
df = [['MPP1',400,30],['MPP2',3500,700], ['MPP3',1900,3], ['MPP4',15000,56], ['MPP5',8500,306]]
df = pd.DataFrame(df)
df.columns =['MPP', 'STK', 'Material']
plt.rcdefaults()
fig, ax = plt.subplots(constrained_layout=True)
xdata = df.STK
x2data = df.Material
ydata = df.MPP
y_pos = np.arange(len(ydata))
ax.barh(y_pos, df.STK , label='STK per MPP')
ax.invert_yaxis()
ax.plot(x2data, ydata, label='Material per MPP', color='red')
ax.set_xlabel('STK')
ax.legend()
ax2 = ax.secondary_xaxis('top')
ax2.set_xlabel('Material')
ax2.set_xticks(df.Material)
ax2.set_xticklabels(df.Material)
ax2.set_xlabel(r"Material")
plt.show()
Ответ №1:
Вы должны создать вторичную ось с:
ax2 = ax.twiny()
и нанесите на него свои данные:
ax2.plot(x2data, ydata, label='Material per MPP', color='red')
Обратите внимание: ax2.plot
, нет ax.plot
.
Полный Код
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
df = [['MPP1',400,30],['MPP2',3500,700], ['MPP3',1900,3], ['MPP4',15000,56], ['MPP5',8500,306]]
df = pd.DataFrame(df)
df.columns =['MPP', 'STK', 'Material']
plt.rcdefaults()
fig, ax = plt.subplots(constrained_layout=True)
xdata = df.STK
x2data = df.Material
ydata = df.MPP
y_pos = np.arange(len(ydata))
ax.barh(y_pos, df.STK , label='STK per MPP')
ax.invert_yaxis()
ax.set_xlabel('STK')
leg = plt.legend()
ax2 = ax.twiny()
ax2.plot(x2data, ydata, label='Material per MPP', color='red')
ax2.set_xlabel('Material')
leg2 = plt.legend()
plt.legend(leg.get_patches() leg2.get_lines(),
[text.get_text() for text in leg.get_texts() leg2.get_texts()])
leg.remove()
plt.show()