Как построить линию на второй оси на ГОРИЗОНТАЛЬНОЙ (не ВЕРТИКАЛЬНОЙ) гистограмме с помощью Matplotlib?

Я знаю, как построить линию на второй оси ВЕРТИКАЛЬНОЙ гистограммы.

Теперь я хочу, чтобы столбцы были ГОРИЗОНТАЛЬНЫМИ, а линия - сверху вниз, как будто весь график поворачивается на 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 21.07.2024 14:51

@RuthC Обновлено...

chaosink 21.07.2024 15:42
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
2
65
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

График 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 в более «естественном» направлении для этого графика.

JohanC 21.07.2024 18:08

Знаете ли вы, как поменять местами верхнюю и нижнюю оси?

chaosink 21.07.2024 22:12

Я добавил код для замены осей

JohanC 22.07.2024 12:16

Другие вопросы по теме