#python #pandas #matplotlib
Вопрос:
Я создаю столбчатую диаграмму со стеком и стилизую ее с помощью set_prop_cycle, потому что с 15 различными элементами использование обычного стиля набора привело к повторению цветов. Например, зима и ураган теперь одного цвета, чего я хочу избежать.
Я знаю, что есть также способ создать цикл вместо библиотеки, но не уверен, как это сделать.
Это мой текущий код :
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
import matplotlib.cm as mplcm
from cycler import cycler
yearly_tcount = pd.read_pickle('yearly_tcount.pkl')
yearly_tcount=yearly_tcount.reset_index()
yearly_tcount = yearly_tcount.drop(labels = [0, 1], axis=0 )
yearly_tcount.columns = ['Start_year', 'Disaster_Type','Event_Count']
types = ['Flood', 'Drought', 'Earthquake', 'Hurricane', 'Storm', 'Tornado',
'Typhoon', 'Fire', 'Ice']
fig, ax = plt.subplots(figsize=(12,8))
cy = cycler('color', [
'#1f77b4', '#aec7e8', '#ff7f0e', '#ffbb78', '#2ca02c', '#98df8a',
'#d62728', '#ff9896', '#9467bd', '#c5b0d5', '#8c564b', '#c49c94',
'#e377c2', '#f7b6d2', '#7f7f7f'
])
yearly_tcount.pivot(index='Start_year', columns = 'Disaster_Type', values='Event_Count' ).plot.bar(stacked=True, ax=ax, zorder=3,)
ax.legend(ncol=3, edgecolor='w')
[ax.spines[s].set_visible(False) for s in ['top','right', 'left']]
ax.tick_params(axis='both', left=False, bottom=False)
ax.set_prop_cycle(cy)
ax.grid(axis='y', dashes=(8,3), color='grey', alpha=0.3)
fig.savefig('Change_in_Type_of_Winter_Weather_Events')
Ответ №1:
Поскольку циклер представляет собой повторение 10 цветов, если вы зададите произвольное количество цветов на цветовой карте, он будет классифицирован по этим цветам. Я использую plotly для данных, чтобы вы могли заменить их своими собственными данными.
import plotly.express as px
data = px.data.gapminder()
europe = data[data.continent == 'Europe']
europe_top15 = europe.groupby('country')['pop'].last().sort_values(ascending=False).head(15)
euro = europe_top15.index.tolist()
df = europe[europe['country'].isin(euro)]
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from matplotlib.colors import ListedColormap
fig, ax = plt.subplots(figsize=(12,8))
colors = ['#1f77b4', '#aec7e8', '#ff7f0e', '#ffbb78', '#2ca02c', '#98df8a',
'#d62728', '#ff9896', '#9467bd', '#c5b0d5', '#8c564b', '#c49c94',
'#e377c2', '#f7b6d2', '#7f7f7f'
]
cmap = ListedColormap(colors, name="custom")
df.pivot(index='year', columns = 'country', values='pop' ).plot.bar(stacked=True, ax=ax, zorder=3, cmap=cmap)
ax.legend(ncol=3, edgecolor='w')
[ax.spines[s].set_visible(False) for s in ['top','right', 'left']]
ax.tick_params(axis='both', left=False, bottom=False)
ax.grid(axis='y', dashes=(8,3), color='grey', alpha=0.3)
fig.savefig('Change_in_Type_of_Winter_Weather_Events')