python - 根据两个数据框值对绘图进行颜色编码

标签 python pandas matplotlib scatter-plot color-scheme

我想根据两个数据帧值对散点图进行颜色编码,以便为每个不同的 df[1] 值分配一个新颜色,并且为每个具有相同 df[2] 的值分配一个新颜色1] 值,较早分配的颜色需要 df[2] 值最高的不透明度变化(在具有相同 df[1] 值的 df[2] 值中)获得 100% 不透明,最低值在组中获得最少不透明数据点。

代码如下:

def func():
    ...

df = pd.read_csv(PATH + file, sep=",", header=None)


b = 2.72
a = 0.00000009

popt, pcov = curve_fit(func, df[2], df[5]/df[4], p0=[a,b])

perr = np.sqrt(np.diag(pcov))

plt.scatter(df[1], df[5]/df[4]/df[2])
# Plot responsible for the datapoints in the figure

plt.plot(df[1], func_cpu(df[2], *popt)/df[2], "r")
# plot responsible for the curve in the figure

plt.legend(loc="upper left")

这是示例数据集:

**df[0],df[1],df[2],df[3],df[4],df[5],df[6]**

file_name_1_i1,31,413,36120,10,9,10
file_name_1_i2,31,1240,60488,10,25,27
file_name_1_i3,31,2769,107296,10,47,48
file_name_1_i4,31,8797,307016,10,150,150
file_name_2_i1,34,72,10868,11,9,10
file_name_2_i2,34,6273,250852,11,187,196
file_name_3_i1,36,84,29568,12,9,10
file_name_3_i2,36,969,68892,12,25,26
file_name_3_i3,36,6545,328052,12,150,151
file_name_4_i1,69,116,40712,13,25,26
file_name_4_i2,69,417,80080,13,47,48
file_name_4_i2,69,1313,189656,13,149,150
file_name_4_i4,69,3009,398820,13,195,196
file_name_4_i5,69,22913,2855044,13,3991,4144
file_name_5_i1,85,59,48636,16,47,48
file_name_5_i2,85,163,64888,15,77,77
file_name_5_i3,85,349,108728,16,103,111
file_name_5_i4,85,1063,253180,14,248,248
file_name_5_i5,85,2393,526164,15,687,689
file_name_5_i6,85,17713,3643728,15,5862,5867
file_name_6_i1,104,84,75044,33,137,138
file_name_6_i2,104,455,204792,28,538,598
file_name_6_i3,104,1330,513336,31,2062,2063
file_name_6_i4,104,2925,1072276,28,3233,3236
file_name_6_i5,104,6545,2340416,28,7056,7059
...

因此,x 轴将是 df[1],即 31, 31, 31, 31, 34, 34,...y 轴是 df[5], df[4], df[2]9, 10, 413。对于 df[1] 的每个不同值,需要分配一种新颜色。在 6 种独特的颜色之后重复颜色循环会很好。在每种颜色中,不透明度需要更改为 df[2] 的值(尽管 y 轴是 df[5]、df[4 ], df[2]).最高的获得相同颜色的较深版本,最低的获得相同颜色的最亮版本。

和散点图:

scatter_plot

我想要的颜色代码解决方案大致如下所示:

desired colorcode enter image description here

我在 csv 文件中有大约 200 个条目。

在这种情况下使用 NumPy 是否更有优势?

最佳答案

让我知道这是否合适或者我是否误解了什么-

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

# not needed for you
# df = pd.read_csv('~/Documents/tmp.csv')

max_2 = pd.DataFrame(df.groupby('1').max()['2'])

no_unique_colors = 3
color_set = [np.random.random((3)) for _ in range(no_unique_colors)]
# assign colors to unique df2 in cyclic order
max_2['colors'] = [color_set[unique_df2 % no_unique_colors] for unique_df2 in range(max_2.shape[0])]

# calculate the opacities for each entry in the dataframe
colors = [list(max_2.loc[df1].colors) + [float(df['2'].iloc[i])/max_2['2'].loc[df1]] for i, df1 in enumerate(df['1'])]
# repeat thrice so that df2, df4 and df5 share the same opacity
colors = [x for x in colors for _ in range(3)]

plt.scatter(df['1'].values.repeat(3), df[['2', '4', '5']].values.reshape(-1), c=colors)
plt.show()

enter image description here

关于python - 根据两个数据框值对绘图进行颜色编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65098145/

相关文章:

python - Tornado get_secure_cookie 返回的值与设置的值不同

python-jira获取json

python - 在 Spyder 中使用 input() 时 Matplotlib 卡住

python - Matplotlib Contour Clabel 位置

python - 如何格式化缺少日期的 x 轴时间序列刻度线

python - 如何使用python在couchdb中添加过滤功能?

python - 如何绘制正确的分布 TreeMap ?

python - 精确的单词匹配并显示在列中

python - 将索引拆分为 Pandas 中的单独列

python - 如何删除数据帧(python)中具有起始索引和结束索引的一行索引?