我正在同一图上绘制两个数据框,以及每个数据集的均值与每个数据集具有相同cmap的平均值。但是,将cmap应用于不同数据集的颜色顺序是不同的。有人可以指出我们在做什么错吗?
这是输出。如您所见,标记具有相同的形状,但是具有不同的颜色(x):
代码如下:
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')
答案 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