1 回答

TA貢獻1818條經驗 獲得超3個贊
奇怪的事情正在發生,可能是熊貓與matplotlib一起工作的某種錯誤:每當標記是小寫字母時,它似乎并不服從給定的色彩映射表,它只是遵循“prop_cycle”。
以下是兩種解決方法。最簡單的方法是避免所有這些小寫字母標記并選擇不同的標記。
另一種解決方法是顯式設置顏色周期,并在繪制第二部分時重置它。請注意,從 viridis 色彩映射表中選擇 9 種間距相等的顏色。如果沒有設置明確的數字,viridis有256種顏色,其中8種顏色都非常相似(深紫色)。我們選擇9種顏色,后來忽略最后一種顏色,因為黃色對于此應用程序來說對比度太小。(別忘了省略大熊貓的論點)。cmap = plt.cm.get_cmap('viridis', 9)
cmap
plot
顯式顏色循環可以更好地控制使用哪些顏色。您還可以選擇例如cmap = plt.cm.get_cmap(“Dark2”),
它只有較暗的顏色,并且與白色背景具有足夠的對比度。
下面是一些代碼來演示它是如何工作的:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
df1 = pd.DataFrame(np.random.randint(10, 25, size=(7, 8)), columns=list('ABCDEFGH'))
df2 = pd.DataFrame(np.random.randint(30, 45, size=(7, 8)), columns=list('ABCDEFGH'))
# create a color map with 9 colors from viridis
cmap = plt.cm.get_cmap('viridis', 9)
fig, ax = plt.subplots(figsize=(8, 4))
markers = ['.', '*', '1', '2', '3', '4', '+', 'x']
# plot the first dataframe
# set the prop_cycle to use 8 colors from the given colormap
ax.set_prop_cycle(color=cmap.colors[0:8])
df1.plot(style=markers, ax=ax)
df1.mean(axis=1).plot(c='red', style='--', label='M1 mean', ax=ax)
# plot the second dataframe
ax.set_prop_cycle(color=cmap.colors[0:8])
df2.plot(ax=ax, style=markers)
df2.mean(axis=1).plot(ax=ax, c='black', style='--', label='M3 mean')
plt.ylim(0, 45)
plt.xlim(-0.5, 6.2)
plt.ylabel('Average Efficiency')
plt.xticks(range(7), ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'])
# change the legend
plt.legend(title='Groups', bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.1, ncol=2)
font = {'family': 'normal',
'weight': 'normal',
'size': 10}
matplotlib.rc('font', **font)
plt.tight_layout()
plt.show()
添加回答
舉報