【发布时间】:2019-10-20 23:27:24
【问题描述】:
Matplotlibs 离散颜色条在我的颜色图中缺少一种颜色定义,并且也在图中使用。
在我的示例代码中,我有七种颜色,但颜色条只显示六种颜色,尽管创建颜色图和颜色条的代码似乎与我在互联网上找到的示例相同。缺少带有 eh 标签“180”的红色。即使我更改了边界并打勾,颜色栏中的米色或浅蓝色也会被扩展。
import matplotlib.pyplot as plt
import matplotlib
import numpy as np
import pandas as pd
# 4 marker
# 7 color
n=100
c = np.random.randint(1,8,size=n)
m = np.random.randint(1,5,size=n)
x = np.random.uniform(size=n)
y = np.random.uniform(size=n)
d_data = {'P':x, 'f':y, 'node':c, 'arch':m}
df = pd.DataFrame(d_data)
# Creating a unique list of elements
l_arch = df.arch.unique()
l_node = df.node.unique()
# Sorting is needd for good colormap
l_arch.sort()
l_node.sort()
# Creating a markers dictionary
zti_markers = ["v","^","s","o","x","+","D"]
d_marker = dict(zip(l_arch,zti_markers[:len(l_arch)] ))
# Creating a colormap and a color dictionary; A little cheat here: I know how
many different colors I need.
color_list = ['#a6cee3','#1f78b4','#b2df8a','#33a02c','#fb9a99','#e31a1c','#fdbf6f']
cmap = matplotlib.colors.ListedColormap(color_list)
norm = matplotlib.colors.BoundaryNorm(l_node, cmap.N)
d_color = dict(zip(l_node, color_list))
fig, ax = plt.subplots()
df['color'] = df['node'].apply(lambda x: d_color[x])
df['marker'] = df['arch'].apply(lambda x: d_marker[x])
for idx, row in df.iterrows():
ax.scatter(row['P'], row['f'], color=row['color'], marker=row['marker'])
cax, _ = matplotlib.colorbar.make_axes(ax)
cb = matplotlib.colorbar.ColorbarBase(cax, cmap=cmap, norm=norm,
spacing='uniform', orientation='vertical', extend='neither') #, ticks=l_node,
boundaries=l_node)
# cb = matplotlib.colorbar.ColorbarBase(cax, cmap=cmap, norm=norm,
spacing='uniform', orientation='vertical', extend='neither', ticks=l_node, boundaries=l_node)
# cb = matplotlib.colorbar.ColorbarBase(cax, cmap=cmap, norm=norm,
spacing='uniform', orientation='vertical', extend='neither', boundaries=[i-0.5 for i in l_node])
cb.set_ticklabels(['22','38','45','65','90','130','180'])
cb.set_ticks([0.5,1.5,2.5,3.5,4.5,5.5,6.5],update_ticks=True)
# cb.update_ticks()
cb.set_label('colorbar', rotation=90)
print(plt.gci()) # --> None
# gci(): Get the current colorable artist. Specifically, returns the current ScalarMappable instance (image or patch collection), or None if no images or patch collections have been defined.
plt.show()
如何修复颜色栏以包含丢失的红色?
【问题讨论】:
标签: python pandas matplotlib colorbar scatter