python - 根据 pandas.DataFrame 中的值更改 seaborn.catplot 标记颜色亮度
问题描述
我尝试从包含多个基数(A、C、G、T、U 1和 U 2)的数据中创建一个sns.catplot
图表。
我的目标是仅绘制标记,这些标记取决于 的值的亮度,因此没有线条或框或任何东西。我也试了好几件,但“剧情不想选”超过三种颜色。pd.DataFrame
df ['environment']
cycler.cycler (color = colourlist)
import matplotlib.pyplot as plt
import matplotlib
import seaborn as sns
import pandas as pd
import numpy as np
import cycler
import os
sns.set (style = 'white', color_codes = True, palette = ["#FF0000", "#0000FF", "#00FF00", "#C03030", "#3030C0", "#30C030"])
colourlist = np.array ([ [0, 0, 0] ])
for v in [0, 45] :
for s in [0, 45] :
for h in [0, 120, 240] :
try :
H, S, V = h / 360., (100 - s) / 100., (100 - v) / 100.
colourlist = np.append (colourlist, [ [H, S, V] ], axis = 0)
except :
pass
colourlist = np.delete (colourlist, 0, 0)
matplotlib.rcParams ['axes.prop_cycle'] = cycler.cycler (color = colourlist)
matplotlib.rcParams ['image.cmap'] = 'hsv'
matplotlib.rcParams ['savefig.transparent'] = True
matplotlib.rcParams ['savefig.format'] = 'eps'
matplotlib.rcParams ['axes.xmargin'] = 0
matplotlib.rcParams ['axes.ymargin'] = 0
matplotlib.rcParams ['figure.frameon'] = False
matplotlib.spines.rcParams ['axes.spines.right'] = False
matplotlib.spines.rcParams ['axes.spines.top'] = False
matplotlib.rcParams ['xtick.bottom'] = True
matplotlib.rcParams ['ytick.left'] = True
file = os.path.join (os.environ ['HOME'], 'Data.csv')
with open (file, 'r') as f :
df = pd.read_csv (f, index_col = 0, header = 0, thousands = None, decimal = '.')
df ['base'] = df ['base'].str.upper ()
#df ['method'] = df ['method'].str.upper ()
df = df.sort_values (['charge', 'base', 'environment'])
sns.catplot (jitter = False, data = df, x = 'base', y = 'energy', hue = 'charge', palette = ["#000FFF", "#00FF00", "#FF0000", "#00FFFF", "#FF00FF", "#FFFF00"], order = ['A', 'C', 'U1', '', 'G', 'T', 'U2'])
〜/数据.csv:
,environment,base,charge,energy,method
0,pbs,A,neg,0.34835,1
1,pbs,C,neg,0.40194,2
2,pbs,G,neg,0.34959,1
3,pbs,T,neg,0.40738,2
4,pbs,U1,neg,0.34904,2
5,pbs,U2,neg,0.40016,2
6,pbs,A,neu,0.40151,3
7,pbs,C,neu,0.34494,3
8,pbs,G,neu,0.40193,3
9,pbs,T,neu,0.34458,3
10,pbs,U1,neu,0.34646,3
11,pbs,U2,neu,0.40871,3
12,pbs,A,pos,0.34047,2
13,pbs,C,pos,0.40157,2
14,pbs,G,pos,0.34232,2
15,pbs,T,pos,0.40854,2
16,pbs,U1,pos,0.34611,2
17,pbs,U2,pos,0.34414,2
18,polymeric,A,neg,0.28333,2
19,polymeric,C,neg,0.46908,3
20,polymeric,G,neg,0.33224,3
21,polymeric,T,neg,0.35825,1
22,polymeric,U1,neg,0.33033,3
23,polymeric,U2,neg,0.39167,3
24,polymeric,A,neu,0.36964,2
25,polymeric,C,neu,0.33979,2
26,polymeric,G,neu,0.41815,3
27,polymeric,T,neu,0.30786,2
28,polymeric,U1,neu,0.40727,1
29,polymeric,U2,neu,0.36719,3
30,polymeric,A,pos,0.38173,1
31,polymeric,C,pos,0.35060,3
32,polymeric,G,pos,0.37617,1
33,polymeric,T,pos,0.44172,2
34,polymeric,U1,pos,0.31267,3
35,polymeric,U2,pos,0.34478,2
我想到了类似的东西
sns.scatterplot (data = df, x = 'base', y = 'energy', hue = 'charge', x_order = ['A', 'C', 'U1', '', 'G', 'T', 'U2'], brightness = np.where (df ['environment'] == 'pbs', 1., .5) ).
我也可以用 绘制这个(数据;pandas.DataFrame
)matplotlib
吗?代码看起来如何?
解决方案
推荐阅读
- html - Ionic 4 按钮禁用属性
- azure - 运行 Dataflow 时,Azure 数据工厂运行时看起来不同
- html - 使文本区域填充剩余的 td 而不会溢出到新行
- google-apps-script - 为特定工作表创建 CSV 文件,然后发送带有表格的电子邮件(文件名和链接)
- mysql - Apache Superset 无法连接到 MySQL 5.1
- nginx - Nginx 上的 Flask 应用程序在 1 分钟后超时
- java - 以 java 保留字作为包名的弹出 expo 应用程序
- python - 在 python 中,有没有办法设置一个非阻塞的 tkinter 更新计时器,同时保持窗口打开?
- javascript - 我的电梯循环数量做错了什么?
- c - 如果逻辑流,使用夹板检测总是错误的