【发布时间】:2020-05-24 17:01:34
【问题描述】:
我有一个包含 3 列的数据框。我使用 df['name'] 作为 x 轴,使用 df['value1'] 作为 y 轴。我想使用第 3 列 (df['value2']) 为条形图生成颜色渐变。
使用中的数据
df['name'] 是名称。 df['value1'] 是主要测量值。 df['value2'] 是 df['value1'] 值的置信度指标。我认为以颜色渐变显示 df['value2'] 会产生强大的视觉效果。
问题
我已经尝试了无数种方法来使用 matplotlib.colors 模块实现这一点,但没有产生我想要的结果。这是代码的基础(没有颜色映射到 df['value2'])。
输入
import pandas as pd
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.colors import ListedColormap, LinearSegmentedColormap
import matplotlib.colors as colors
df = {'name': ['a','b','c','d'], 'value1': [10.1,13.3,9.5,15.1], 'value2': [1.5,2.0,3.5,1.3]}
df = pd.DataFrame(df)
print(df)
colorbar_1 = LinearSegmentedColormap.from_list('colorbar', ['#990000','#FF6666'], N=100)
df[['name','value1']].plot(kind='bar', colormap=colorbar_1 ,width=0.8, ylim=[9,16], fontsize=5)
plt.xticks(df.index,df['name'].values, rotation=90)
plt.ylim([9,16])
plt.gcf().subplots_adjust(bottom=0.15)
plt.tight_layout()
plt.savefig('test.png',dpi=600)
plt.show()
输出
name value1 value2
0 a 10.1 1.5
1 b 13.3 2.0
2 c 9.5 3.5
3 d 15.1 1.3
所需格式
[
我还制作了第 4 列,其中包含生成的十六进制代码,可用于执行手头的任务。我假设有更简单的方法可以合并 df['value2'] 但是生成十六进制代码可能很方便?
输入
import pandas as pd
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.colors import ListedColormap, LinearSegmentedColormap
import matplotlib.colors as colors
df = {'name': ['a','b','c','d'], 'value1': [10.1,13.3,9.5,15.1], 'value2': [1.5,2.0,3.5,1.3]}
df = pd.DataFrame(df)
print(df)
norm = mpl.colors.Normalize(vmin=0, vmax=16, clip=True)
mapper = plt.cm.ScalarMappable(norm=norm, cmap=plt.cm.viridis)
df['hex_code'] = df['value2'].apply(lambda x: colors.to_hex(mapper.to_rgba(x)))
print(df)
输出
name value1 value2
0 a 10.1 1.5
1 b 13.3 2.0
2 c 9.5 3.5
3 d 15.1 1.3
name value1 value2 hex_code
0 a 10.1 1.5 #482374
1 b 13.3 2.0 #472d7b
2 c 9.5 3.5 #3e4989
3 d 15.1 1.3 #481d6f
【问题讨论】:
标签: python pandas matplotlib colormap