如何更改欢乐情节中的色彩图?

时间:2019-06-26 17:59:50

标签: python matplotlib visualization

我有一个看起来像这样的数据框:

  Team  Minute  Type
   148      12     1
   148      22     1
   143      27     1
   148      29     1
   143      32     1
   143      32     1

我使用Python库joypy

创建了一个Joyplot。
fig, axes = joypy.joyplot(df, by="Team", column="Minute", figsize =(10,16), x_range = [0,94], linewidth = 1, colormap=plt.cm.viridis)

哪个给了我这个情节

enter image description here

一切都很好。 但是,颜色图现在已经毫无意义,因此我尝试根据第二个数据帧为图表着色-这是所有团队的Type的总和。

为此,我使用以下几行创建了一个范数和一个色图:

norm = plt.Normalize(group_df["Type"].min(), group_df["Type"].max())
cmap = plt.cm.viridis
sm = matplotlib.cm.ScalarMappable(cmap=cmap, norm=norm)
ar = np.array(group_df["Type"])
Cm = cmap(norm(ar))
sm.set_array([])

这里是出现问题的地方,因为我不知道如何更改游戏手柄的颜色: 我尝试了几种方法

  1. 我试图将此Cm作为colormap参数传递。但是,这引发了错误-typeerror 'numpy.ndarray' object is not callable

  2. 我试图在axesCm上使用for循环-

for col, ax in zip(Cm, axes):
    ax.set_facecolor(col)
    #ax.patch.set_facecolor(col) ##Also tried this; didn't change anything

如何更好地控制操纵杆的颜色并进行更改?任何帮助将不胜感激。

MCVE

我正在读取的csv文件的示例(数据帧的实际形状为(4453,2)):

      Team  Minute
0      148       5
1      148       5
2      148      11
3      148      11
4      148      12
5      148      22
6      143      27

我的代码:

df = pd.read_csv(r"path")

##getting the sum for every team - total of 20 teams
group_df = df.groupby(["Team"]).size().to_frame("Count").reset_index()

df["Minute"] = pd.to_numeric(df["Minute"])

##Trying to create a colormap 
norm = plt.Normalize(group_df["Count"].min(), group_df["Count"].max())
cmap = plt.cm.viridis
sm = matplotlib.cm.ScalarMappable(cmap=cmap, norm=norm)
ar = np.array(group_df["Count"])
Cm = cmap(norm(ar))
sm.set_array([])


fig, axes = joypy.joyplot(df, by="Team", column="Minute", figsize =(10,16), x_range = [0,94], colormap = plt.cm.viridis)

我想用group_df["Count"]值中团队的总人数为图中的每个子图着色。当前,颜色图只是均匀的,并不根据总值。上面的图片是制作出来的。

1 个答案:

答案 0 :(得分:0)

joypy从颜色图中依次填充KDE曲线的颜色。因此,为了使颜色与第三个变量匹配,您可以提供一个色图,其中包含所需顺序的颜色。可以使用<IfModule mod_rewrite.c> RewriteEngine On RewriteBase /dir/ # Remove Trailing Dot # ------------------------------ RewriteCond %{HTTP_HOST} ^(.+?)\.$ RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=302] # Multiple Slashes # ------------------------------ RewriteCond %{THE_REQUEST} // RewriteRule ^.*$ $0 [L,NE,R=302] # Trailing Slash # ------------------------------ RewriteCond %{REQUEST_URI} !(.*)/$ RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1/ [L,R=301] # Force SSL # ------------------------------ RewriteCond %{HTTPS} !=on RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] # Add WWW # ------------------------------ RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$ RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] </IfModule> 完成。

ListedColormap

enter image description here