Как нарисовать гистограммы для очень малых значений в Python или Matplotlib?

1

Я нарисовал диаграмму сравнения для очень маленьких значений со следующим кодом,

import pandas as pd
import matplotlib.pyplot as plt

data = [[ 0.00790019035339353, 0.00002112],
    [0.0107705593109131, 0.0000328540802001953],
    [0.0507792949676514, 0.0000541210174560547]]

df = pd.DataFrame(data, columns=['A', 'B'])
df.plot.bar()

plt.bar(df['A'], df['B'])
plt.show()

Из-за очень малых значений я не могу визуализировать цвет диаграммы для столбца ('B') меньшего значения (например, 0,00002112) на графике.

Изображение 174551

Как изменить код для визуализации цвета меньшего значения (B столбца) на графике? Спасибо..

Теги:
matplotlib
python-3.x
matplotlib-basemap

2 ответа

2
Лучший ответ

Общим способом отображения данных с разных порядков является использование логарифмического масштабирования для оси y. Ниже логарифма на базу 10, но могут быть выбраны другие базы.

import pandas as pd
import matplotlib.pyplot as plt

data = [[ 0.00790019035339353, 0.00002112],
        [0.0107705593109131, 0.0000328540802001953],
        [0.0507792949676514, 0.0000541210174560547]]

df = pd.DataFrame(data, columns=['A', 'B'])
df.plot.bar()

plt.yscale("log")
plt.show()

Изображение 174551

Обновление. Чтобы изменить форматирование ярлыков ScalarFormatter можно использовать экземпляр ScalarFormatter:

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.ticker import ScalarFormatter

data = [[ 0.00790019035339353, 0.00002112],
        [0.0107705593109131, 0.0000328540802001953],
        [0.0507792949676514, 0.0000541210174560547]]

df = pd.DataFrame(data, columns=['A', 'B'])
df.plot.bar()

plt.yscale("log")
plt.gca().yaxis.set_major_formatter(ScalarFormatter())
plt.show()

Изображение 174551

  • 0
    Спасибо большое LuckyJosh .. Это также хороший вариант для рисования, как этот вид графика .. Спасибо ..
  • 0
    LuckyJosh: - Визуализация графика вывода с точки зрения вашего решения очень хорошая и простая. Есть ли возможность отображать значение оси Y в виде точного значения (например, 0,00002112), а не 10 ^ -4. Если это возможно, попробуйте указать длину цифр дробной части (например, 0,00 или 0,00000). Если означает, что это будет полезно для будущего. Спасибо..
Показать ещё 5 комментариев
0

Вы можете создать 2 оси y следующим образом:

fig, ax1 = plt.subplots()
ax2 = ax1.twinx()
width = 0.2
df['A'].plot(kind='bar', color='green', ax=ax1, width=width, position=1, label = 'A')
df['B'].plot(kind='bar', color='blue', ax=ax2, width=width, position=0, label = 'B')

ax1.set_ylabel('A')
ax2.set_ylabel('B')

# legend
h1, l1 = ax1.get_legend_handles_labels()
h2, l2 = ax2.get_legend_handles_labels()
ax1.legend(h1+h2, l1+l2, loc=2)

plt.show()

Изображение 174551

  • 0
    Вышеуказанный вывод только я ожидал .. На самом деле большое спасибо ..
  • 1
    Конечно .. Я сделал это ..

Ещё вопросы

Сообщество Overcoder
Наверх
Меню