Как умножить значения гистограммы по оси Y на фиксированное число в Python - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть список данных для построения с использованием гистограмм.Я хочу масштабировать y-axis каждого графика отдельно.Если мне нравится следующее, он масштабирует y-axis каждого графика на 10.

protocols = {}
types = {"data1": "data1.csv", "data2": "data2.csv", "data3": "data3.csv"}

for protname, values in protocols.items():
    fig, ax1 = plt.subplots()
    ax1.hist(values["col_data"], facecolor='blue', alpha=0.9, label=protname,align='left')
    y_vals = ax1.get_yticks()
    ax1.set_yticklabels(['{:3.0f}'.format(x * 10) for x in y_vals])
    plt.legend()
    plt.show()

enter image description here enter image description here enter image description here

Однако я хочу, чтобы масштабирование было отдельным для каждой гистограммы.Я попробовал это следующим образом, но, похоже, он не работает должным образом.

for protname, values in protocols.items():
    fig, ax1 = plt.subplots()
    ax1.hist(values["col_data"], facecolor='blue', alpha=0.9, label=protname,align='left')
    y_vals = ax1.get_yticks()
    ax1.set_yticklabels(['{:3.0f}'.format(x * 10) for x in y_vals if protname=="data1" and ['{:3.0f}'.format(x * 10) for x in y_vals if protname=="data2" and ['{:3.0f}'.format(x * 15) for x in y_vals if protname=="data3"]]])

    plt.legend()
    plt.show()

enter image description here enter image description here enter image description here

Если мы попробуем ТОЛЬКО для одного графика как ax1.set_yticklabels(['{:3.0f}'.format(x * 10) for x in y_vals if protname=="data2"]), то изменения будут применены только ко второму графику, а остальные останутся пустыми.

1 Ответ

0 голосов
/ 21 февраля 2019

Сначала меня заинтересует, почему вы хотите манипулировать значениями оси Y, поскольку значения гистограммы - это значения ваших данных - я не вижу причины для изменения этого значения без потери значения для ваших данных.

Тем не менее, мой следующий вопрос будет в общем случае, если вы намеренно установите plt.subplots внутри вашего цикла for, потому что один вариант использования этой команды фактически создает несколько подзаговоров на одной фигуре- возможно, вы подумаете об этом позже ...

Однако самый простой способ применить разные факторы на разных итерациях - просто добавить их в виде другого списка в ваш цикл с помощью zip:

factors = [10, 10, 15]
for (protname, values), m in zip(protocols.items(), factors):
    ...
    ax1.set_yticklabels(['{:3.0f}'.format(x * m) for x in y_vals])
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...