matplotlib: при использовании стиля 'Fivethirtyeight', как рисовать линию сетки за баром и легендой - PullRequest
0 голосов
/ 23 сентября 2018

Как заголовок, как я могу переместить мою сетку позади при использовании стиля, такого как 'Fivethirtyeight'?

Я пробовал Axis.set_axisbelow(True) и ax.grid(zorder=0), но ни один из них не работает.

Здесь показан рисунок

Как видите, линия сетки находится над легендой, что затрудняет ее чтение.

код показан здесь:

import pandas as pd

import matplotlib.pyplot as plt



plt.style.use('fivethirtyeight')



data = pd.DataFrame(np.array([['Bacterial alpha-amylase', 1.0, 4.0, 0.0, 4.0] ,
['Fungal glucoamylase', 7.5, 24.0, 0.0, 24.0] ,
['Fungal phytase', 2.2, 6.0, 0.0, 6.0] ,
['Bacterial protease', 4.3, 14.0, 0.0, 14.0] ,
['Bacterial amylase', 10.2, 29.0, 0.0, 29.0] ,
['GSK_A', 12.0, 65.0, 0.0, 65.0] ,
['GSK_B', 3.0, 25.0, 0.0, 25.0] ,
['GSK_C', 4.0, 35.0, 0.0, 35.0] ,
['Ecoinvent_Europe', 6.4237, 0.052362, 0.0, 0.052362] ,
['Ecoinvent_rest of world', 8.8557, 0.056691, 0.0, 0.056691] ,
['Rhodium', 34967.0, 587.81, 587.81, 0.0]]), 
columns = ['enzyme', 'GWP100', 'Acidification', 'new_acid_2', 'new_acid_1'])

# the one below is to convert my numbers to float,
# which is set as string by default in the first place by python

for i in data.columns.values:
    if i =='enzyme':
        pass
    else:
        data[i] = data[i].astype(float)




fig = plt.figure(2, figsize=(6,4))


ax3 = fig.add_subplot(111)
ax4 = ax3.twinx()

data['new_acid_2'] = data.Acidification
data.loc[data['new_acid_2']<100, 'new_acid_2'] = 0

data['new_acid_1'] = data.Acidification
data.loc[data['new_acid_1'] > 100, 'new_acid_1'] = 0


my_label = data.enzyme.values


x_pos = np.arange(11)


h1 = ax3.bar(x_pos, data.new_acid_1.values,  label=my_label)
h2 = ax4.bar(x_pos, data.new_acid_2.values,  label=my_label)
h1[-1].set_color('maroon')
h2[-1].set_color('maroon')


ax3.legend(h2,my_label, loc = 2,fontsize = 8)
ax3.set_axisbelow(True)


plt.show()

Как я могу переместить мою сетку позади, используя стиль, такой как 'Fivethirtyeight'?

Любое предложение приветствуется.Заранее спасибо.

1 Ответ

0 голосов
/ 23 сентября 2018

Имеет смысл не показывать линии сетки с двумя осями, потому что интервал ax3 выглядит неравномерным.Добавьте следующие две строки после построения h1 и h2

ax3.grid(zorder=0)
ax4.grid(False)

Альтернативное решение - использование zorder=1 при построении гистограммы.zorder баров должно быть больше, чем у сетки (по умолчанию 0).Думайте о zorder как о глубине двумерного холста / фигуры, которую вы видите, где глубина ушла в бумагу / экран.

h1 = ax3.bar(x_pos, data.new_acid_1.values,  label=my_label,zorder=1)
h2 = ax4.bar(x_pos, data.new_acid_2.values,  label=my_label, zorder=1)
ax3.grid(True)
ax4.grid(False)

Вывод

enter image description here

...