Гистограмма Matplotlib с форматированием таблицы - PullRequest
0 голосов
/ 11 января 2019

Я добавил таблицу в конец моего графика, но есть ряд проблем с ним:

  1. Право имеет слишком много отступов.
  2. Слева слишком мало.
  3. У дна нет прокладок.
  4. Ячейки слишком малы для текста внутри них.
  5. Таблица находится слишком близко к нижней части графика.
  6. Ячейки, принадлежащие именам строк, не окрашены в соответствии с ячейками столбцов.

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

Вот код (Python 3):

import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
import matplotlib
# Set styles
plt.style.use(['seaborn-paper', 'seaborn-whitegrid'])
plt.style.use(['seaborn'])
sns.set(palette='colorblind')
matplotlib.rc("font", family="Times New Roman", size=12)

labels = ['n=1','n=2','n=3','n=4','n=5']
a = [98.8,98.8,98.8,98.8,98.8]
b = [98.6,97.8,97.0,96.2,95.4]
bar_width = 0.20
data = [a,b]
print(data)
colors = plt.cm.BuPu(np.linspace(0, 0.5, len(labels)))
columns = ('n=1', 'n=2', 'n=3', 'n=4', 'n=5')

index = np.arange(len(labels))
plt.bar(index, a, bar_width)
plt.bar(index+bar_width+.02, b, bar_width)
plt.table(cellText=data,
          rowLabels=['a', 'b'],
          rowColours=colors,
          colLabels=columns,
          loc='bottom')

plt.subplots_adjust(bottom=0.7)

plt.ylabel('Some y label which effect the bottom padding!')
plt.xticks([])
plt.title('Some title')
plt.show()

Это вывод:

enter image description here

Обновление

Это работает сейчас, но в случае, если у кого-то еще возникли проблемы: убедитесь, что вы не просматриваете свои графики и изменения, которые вы вносите в них с помощью IntelliJ SciView, так как это не точно отражает изменения и вызывает некоторые проблемы с форматированием!

1 Ответ

0 голосов
/ 11 января 2019

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

bbox=[0, 0.225, 1, 0.2]

где параметры [left, bottom, width, height].

Для второй проблемы (раскраска) это связано с тем, что массив color не соответствует раскраске seaborn. Вы можете запросить цветовую палитру seaborn с помощью

sns.color_palette(palette='colorblind')

это даст вам список цветов, используемых seaborn.

Проверьте следующие модификации:

import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
import matplotlib
# Set styles
plt.style.use(['seaborn-paper', 'seaborn-whitegrid'])
plt.style.use(['seaborn'])
sns.set(palette='colorblind')
matplotlib.rc("font", family="Times New Roman", size=12)

labels = ['n=1','n=2','n=3','n=4','n=5']
a = [98.8,98.8,98.8,98.8,98.8]
b = [98.6,97.8,97.0,96.2,95.4]
bar_width = 0.20
data = [a,b]

colors = sns.color_palette(palette='colorblind')
columns = ('n=1', 'n=2', 'n=3', 'n=4', 'n=5')

index = np.arange(len(labels))
fig = plt.figure(figsize=(12,9))
plt.bar(index, a, bar_width)
plt.bar(index+bar_width+.02, b, bar_width)
plt.table(cellText=data,
          rowLabels=[' a ', ' b '],
          rowColours=colors,
          colLabels=columns,
          loc='bottom',
          bbox=[0, 0.225, 1, 0.2])

fig.subplots_adjust(bottom=0.1)

plt.ylabel('Some y label which effect the bottom padding!')
plt.xticks([])
plt.title('Some title')
plt.show()

Я также изменил настройку субплота на subplot_adjust(bottom=0.1), потому что иначе это не получалось. Вот вывод:

Output

...