我有两个向量,一个带有值,另一个带有1,2,3等类标签.
我想将所有属于1级的点用红色绘制,用2级用蓝色绘制,用3级用绿色绘制等等.我该怎么做?
我正在使用NetworkX来分析和可视化社交网络.通常,网络内的节点具有与它们相关联的属性信息,例如划分.但是,我并不总是知道属性划分可能有多少选项.例如,有时可能只有3个分区表示为网络中的节点属性,有时可能有30个分区.
我已经弄清楚如何根据节点属性设置节点颜色(参见下面的代码).但是,在此示例中,我知道节点属性组(5个选项)的选项有多不同,并自动设置每种颜色.
当节点属性只有3或5个选项时,选择节点属性颜色并不困难,但是当有更多选项时,这变得不现实.
我想弄清楚的是如何根据提供的节点属性选项的数量自动选择最佳节点属性颜色.
有时候我有5个属性要着色的选项,有时我可能有30个选项让节点属性着色,我不想单独设置每个节点颜色.
我不确定这是否应该能够与colormap函数一起使用,或者如果仅通过数值度量(例如度中心度)用于颜色节点.
NETWORKX代码
import networkx as nx
pylab inline
# create an empty graph
g = nx.Graph()
# open csv edgelist and read edges into graph
for line in open('phils_network_edgelist.csv', 'rb'):
edge = line.rstrip().split(',')
g.add_edge(edge[0], edge[1])
# draw network without node color
nx.draw(g, with_labels=False, node_size=25)
Run Code Online (Sandbox Code Playgroud)

# read in node attributes as list of tuples
group_attr = []
for line in open('phils_network_attribute_group.csv', 'rb'):
group_attr.append(tuple(line.rstrip().split(',')))
# convert list of tuples into a dict
group_attr_dict = dict(set(sorted(group_attr))) …Run Code Online (Sandbox Code Playgroud) 正如在此示例代码中所见,由于 0 在频谱中的某个位置,因此很难追踪哪些点是负的,哪些是正的。虽然我的真实情节更连续,但我想知道是否有办法在这些情节图中分离负值和正值;例如,我如何为正值和负值使用两种不同的颜色光谱。
import numpy as np
from matplotlib import pyplot as plt
a=np.random.randn(2500).reshape((50,50))
plt.imshow(a,interpolation='none')
plt.colorbar()
plt.show()
Run Code Online (Sandbox Code Playgroud)

编辑 在@MultiVAC 的帮助下,我在寻找解决方案时遇到了这个问题。
import numpy as np
from matplotlib import pyplot as plt
from matplotlib.colors import BoundaryNorm
a=np.random.randn(2500).reshape((50,50))
# define the colormap
cmap = plt.cm.jet
# extract all colors from the .jet map
cmaplist = [cmap(i) for i in range(cmap.N)]
# create the new map
cmap = cmap.from_list('Custom cmap', cmaplist, cmap.N)
# define the bins and normalize
bounds = np.linspace(np.min(a),np.max(a),5)
norm …Run Code Online (Sandbox Code Playgroud) 所以我有一个使用 seaborn 创建的热图
revels = rd.pivot("Flavour", "Packet number", "Contents")
ax = sns.heatmap(revels, annot=True, fmt="d", linewidths=0.4, cmap="YlOrRd")
plt.show()
Run Code Online (Sandbox Code Playgroud)
然而,我想做两件事,尽管查阅了 seaborn 的帮助文件(http://seaborn.pydata.org/generated/seaborn.heatmap.html),但我终其一生都无法弄清楚该怎么做
我想要做的就是以不同的方式订购口味。尽管在文本文件中输入的顺序为橙子、太妃糖、巧克力、麦芽、葡萄干、咖啡,但在绘图时不会以这种方式生成。我试图编辑 yticklabs 但这只是编辑标签而不是移动数据。
谢谢你的帮助
PS数据如下:
Packet number,Flavour,Contents
1,orange,4
2,orange,3
3,orange,2
...
1,toffee,4
2,toffee,3
3,toffee,3
...
etc.
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用matplotlib.imshow来绘制一个布尔二维数组,我希望能够选择两种颜色(一种用于true,一种用于false)。似乎这个参数应该作为颜色图传递给,imshow但在我的情况下它似乎有点矫枉过正,因为我不需要连续,更重要的是,我不知道如何定义自定义颜色图(matplotlib doc没有帮助我)。
更新: 我选择了一个色彩映射渐变(在我的例子中是'nipy_spectral')并制作了一个字典,将我想要的颜色映射到一个整数,以便绘图函数绘制正确的颜色.它涉及很多数字的未来.如果没有更好的结果,我会发布解决方案.
我有以下绘图功能改编自我用于混淆矩阵的另一个绘图功能:
def plot_matrix(rm, title='Robot World', cmap=plt.cm.Blues):
plt.imshow(rm, interpolation='nearest', cmap=cmap)
plt.title(title)
plt.tight_layout()
Run Code Online (Sandbox Code Playgroud)
我有一个以下形式的矩阵:
[1,3,1,0,1,3,4]
[3,1,0,1,2,3,0]
......还有几行.
理想情况下,我绘制此矩阵,使得矩阵内的整数值对应于颜色:['black','blue','yellow','green','red']在一个看起来像matplotlib示例网站上的示例矩阵的图中,用于插值最近:
我认为答案必须是某种自定义cmap,例如:
cmap = { 0:'k',1:'b',2:'y',3:'g',4:'r' }
Run Code Online (Sandbox Code Playgroud)
我怎么在matplotlib中这样做?我正在查看自定义色彩映射网站,它似乎比我想做的更多涉及...
我想做一些类似于http://matplotlib.org/examples/pylab_examples/hist2d_log_demo.html的内容,但我已经读到使用pylab代替python交互模式以外的代码是不好的做法所以我想这样做matplotlib.pyplot.但是,我无法弄清楚如何使用pyplot使这段代码工作.使用,pylab,给出的例子是
from matplotlib.colors import LogNorm
from pylab import *
#normal distribution center at x=0 and y=5
x = randn(100000)
y = randn(100000)+5
hist2d(x, y, bins=40, norm=LogNorm())
colorbar()
show()
Run Code Online (Sandbox Code Playgroud)
我尝试了很多
import matplotlib.pyplot as plt
fig = plt.figure()
ax1 = fig.add_subplot(1,1,1)
h1 = ax1.hist2d([1,2],[3,4])
Run Code Online (Sandbox Code Playgroud)
从这里我已经尝试了plt.colorbar(h1) plt.colorbar(ax1) plt.colorbar(fig) ax.colorbar()等等的一切,我无法得到任何工作.
总的来说,即使在阅读了http://matplotlib.org/faq/usage_faq.html之后,老实说我对pylab和pyplot之间的关系还不是很清楚.例如show()在pylab中似乎变成plt.show()了pyplot,但由于某种原因colorbar不成为plt.colorbar()?
例如,
我四处搜索,找到了接近工作但没有完全适合我需要的东西。
基本上,我真的很喜欢 viridis 颜色图作为起点。但是,我想用白色替换地图最低端的紫色。
我尝试使用,set_under()但这不适合我的需求。我需要简单地用白色替换紫色。
例如,我尝试了以下(从这里Matplotlib 离散颜色条) -
cmap = plt.get_cmap('jet')
cmaplist = [cmap(i) for i in range(cmap.N)]
cmaplist[0] = (1.0,1.0,1.0,1.0)
cmap = cmap.from_list('Custom cmap', cmaplist, cmap.N)
Run Code Online (Sandbox Code Playgroud)
它完美地工作并且完全满足我对“jet”的需求,但是当我用“viridis”替换“jet”时,我收到以下错误
AttributeError: 'ListedColormap' object has no attribute 'from_list'
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题并简单地做我想做的事?
任何帮助都将不胜感激。
谢谢!
我正在使用imshow()来绘制2D numpy数组,例如:
my_array = [[ 2. 0. 5. 2. 5.]
[ 3. 2. 0. 1. 4.]
[ 5. 0. 5. 4. 4.]
[ 0. 5. 2. 3. 4.]
[ 0. 0. 3. 5. 2.]]
plt.imshow(my_array, interpolation='none', vmin=0, vmax=5)
Run Code Online (Sandbox Code Playgroud)
绘制此图像:
然而,我想要做的是改变颜色,例如0是RED,1是GREEN,2是ORANGE,你明白我的意思.有没有办法做到这一点,如果是这样,怎么样?
我试过通过更改colourmap中的条目来尝试这样做,如下所示:
cmap = plt.cm.jet
cmaplist = [cmap(i) for i in range(cmap.N)]
cmaplist[0] = (1,1,1,1.0)
cmaplist[1] = (.1,.1,.1,1.0)
cmaplist[2] = (.2,.2,.2,1.0)
cmaplist[3] = (.3,.3,.3,1.0)
cmaplist[4] = (.4,.4,.4,1.0)
cmap = cmap.from_list('Custom cmap', cmaplist, cmap.N)
Run Code Online (Sandbox Code Playgroud)
但它没有像我预期的那样工作,因为0 =颜色映射中的第一个条目,但是例如1!!=颜色映射中的第二个条目,因此只有0被不同地绘制: