Matplotlib cmap颜色的顺序不同

时间:2020-03-25 14:36:37

标签: python pandas matplotlib

我正在同一图上绘制两个数据框,以及每个数据集的均值与每个数据集具有相同cmap的平均值。但是,将cmap应用于不同数据集的颜色顺序是不同的。有人可以指出我们在做什么错吗?

这是输出。如您所见,标记具有相同的形状,但是具有不同的颜色(x):

enter image description here

代码如下:

import matplotlib
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

#reading
df1 = pd.DataFrame(np.random.randint(10,20,size=(7, 8)), columns=list('ABCDEFGH'))
df2 = pd.DataFrame(np.random.randint(30,40,size=(7, 8)), columns=list('ABCDEFGH'))

#plot the first DataFrame
#trying to select the first 8 RGBA codes from viridis - does not wo
ax = df1.plot(style = ['.','*','1','2','3','4','+','x'],figsize=(8,4),cmap = 'Accent')
#ax.set_prop_cycle(cycler(color = cmap.colors[0:7]))
ax = df1.mean(axis=1).plot(c='red',style = '--',label = 'M1 mean')

#plot the second dataframe
ax = df2.mean(axis=1).plot(ax=ax,c='black',style = '--',label = 'M3 mean')
ax = df2.plot(ax=ax,style = ['.','*','1','2','3','4','+','x'],cmap = 'Accent')

#fiddle with the axes
plt.ylim(0,40)
plt.xlim(-0.5,6.2)

#add the labels

plt.ylabel('Average Efficiency')

#make sure all the ticks are visible
plt.xticks(np.arange(0,7),np.arange(0,7))
plt.xticks([0,1,2,3,4,5,6],['Mon','Tue','Wed','Thu','Fri','Sat','Sun'])
#change the legend
plt.legend([1,2,3,4,5,6,7,8,'M1_mean','M3 mean'],title = 'Groups',bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.1)

#increase the font
font = {'family' : 'normal',
        'weight' : 'normal',
        'size'   : 10}
matplotlib.rc('font', **font)
plt.show()
print('done')

1 个答案:

答案 0 :(得分:2)

正在发生某种奇怪的情况,可能是熊猫如何与matplotlib一起工作的一种错误:每当标记是小写字母时,它似乎就不会遵循给定的颜色图,它只会跟随'prop_cycle'。 / p>

这里有两种解决方法。最简单的就是避免所有这些小写字母markers并选择其他字母。

另一种解决方法是显式设置颜色循环,并在绘制第二部分时将其重置。请注意, # runs on initialization def zufall(self, *args): random_number = random.randrange(10) random_number = str(random_number) return random_number def __init__(self, **kwargs): super().__init__(**kwargs) self.cols = 2 # used for our grid self.add_widget(Label(text='OEE')) self.add_widget(Label(text=self.zufall())) 从绿色配色图中选择9种等距的颜色。如果未设置显式数字,则绿vi蛇有256种颜色,其中前8种颜色非常相似(深紫色)。我们选择9种颜色,然后忽略最后一种颜色,因为对于该应用程序,黄色的对比度太小。 (别忘了从熊猫cmap = plt.cm.get_cmap('viridis', 9)中删除cmap的论点)。

显式的颜色循环可更好地控制使用的颜色。您还可以选择cmap = plt.cm.get_cmap('Dark2')的颜色只有较暗的颜色,而与白色背景的对比度却足够。

以下代码演示了其工作方式:

plot

resulting plot