Я знаю, как построить линию на второй оси ВЕРТИКАЛЬНОЙ гистограммы.
Теперь я хочу, чтобы столбцы были ГОРИЗОНТАЛЬНЫМИ, а линия - сверху вниз, как будто весь график поворачивается на 90 °.
Если я просто заменю bar
на barh
, строка по-прежнему будет идти слева направо...
Могу ли я сделать это с помощью Matplotlib?
Вот образец ВЕРТИКАЛЬНОЙ гистограммы:
import matplotlib.pyplot as plt
import pandas as pd
df = pd.DataFrame(
{
"A": [2, 4, 8],
"B": [3, 5, 7],
"C": [300, 100, 200],
},
index=["a", "b", "c"],
)
ax0 = df.plot(y=df.columns[:2], kind = "bar", figsize=(10.24, 5.12))
ax1 = df["C"].plot(
kind = "line",
secondary_y=True,
color = "g",
marker = ".",
)
plt.tight_layout()
plt.show()
Позвольте мне подчеркнуть: я вижу эти вопросы, связанные с ВЕРТИКАЛЬНЫМИ гистограммами. Теперь я спрашиваю о ГОРИЗОНТАЛЬНЫХ гистограммах.
Так что это не дублирующий вопрос.
@RuthC Обновлено...
График Pandas не поддерживает второстепенную ось X. Вместо этого вы можете напрямую построить график через matplotlib.
(Обратите внимание, что df.plot(...)
строит графики через pandas. Построение графиков Pandas — это специальный интерфейс pandas для matplotlib, который поддерживает только подмножество функций matplotlib.)
import matplotlib.pyplot as plt
import pandas as pd
df = pd.DataFrame(
{
"A": [2, 4, 8],
"B": [3, 5, 7],
"C": [300, 100, 200],
},
index=["a", "b", "c"],
)
ax0 = df.plot(y=df.columns[:2], kind = "barh", figsize=(10.24, 5.12))
ax1 = ax0.twiny()
ax1.plot(df["C"],
df.index,
color = "g",
marker = ".",
)
plt.tight_layout()
plt.show()
PS: Чтобы поменять местами верхнюю и нижнюю оси, вы можете использовать:
ax0 = df.plot(y=df.columns[:2], kind = "barh", figsize=(10.24, 5.12))
ax1 = ax0.twiny()
ax1.plot(df["C"],
df.index,
color = "g",
marker = ".",
)
# change the direction of the y-axis
ax0.invert_yaxis()
# set the x-axis for ax0 at the top
ax0.tick_params(top=True, bottom=False, labeltop=True, labelbottom=False) # for the ticks and tick labels
ax0.xaxis.set_label_position('top') # for the axis label
# set the x-axis for ax1 at the bottom
ax1.tick_params(top=False, bottom=True, labeltop=False, labelbottom=True)
ax1.xaxis.set_label_position('bottom')
Возможно, вы захотите вызвать ax0.invert_yaxis()
, чтобы расположить ось Y в более «естественном» направлении для этого графика.
Знаете ли вы, как поменять местами верхнюю и нижнюю оси?
Я добавил код для замены осей
Не могли бы вы опубликовать минимальный пример того, как вы это делаете для своей вертикальной гистограммы?