Matplotlib -使用特定颜色分配的散点图

smdnsysy  于 2023-03-30  发布在  其他
关注(0)|答案(2)|浏览(126)

这是我的第一篇文章,应该很简单。我必须做一个练习,其中我有一个带有几个变量的数据框,我必须生成一个散点图,在y轴上绘制“价格”,在x轴上绘制“权重”,并根据“优先级”(从1到10)将特定的颜色模式应用于点。
要应用的定义颜色为:

`colors=["navy","lawngreen","red","green","purple","steelblue","orange","darkred","yellow","chocolate"]


所以“Priority=1”应该是colors=“navy”,“Priority=2”应该是colors=“lawngreen”,等等
因此我尝试做以下几件事:

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

df=pd.read_csv("example.csv")
plt.scatter(df.Price,df.Weight,c=df.Priority,s=90)
plt.colorbar()
plt.xlabel('Price')
plt.ylabel('Weight');

``
但是我得到的颜色显然与预定义的颜色不匹配(它们只是分配给每个“Priority”变量值的ramdon颜色。我如何将定义的颜色与Priority变量值联系起来?我试图构建一个字典在plt.scatter line的c参数中使用它,但我无法得到任何正确的结果,所以可能我的公式错误。
先谢了

xe55xuns

xe55xuns1#

x1c 0d1x循环遍历priority的可能值,更改颜色,将标签与每个优先级/颜色对相关联,最后生成一个图例。

import numpy as np
import matplotlib.pyplot as plt
np.random.seed(2023_03_29)

Npt, Npr = 150, 10
wgt = 30 + 20*np.random.random(Npt)
pri = np.random.randint(1, Npr+1, Npt)
prc = wgt*(190+np.random.randint(0, 21, Npt)+3*pri)
color = ("C%d"%n for n in range(1,11))
for p in range(min(pri), max(pri)+1):
    i = pri==p
    plt.scatter(wgt[i], prc[i], color=next(color), label="%d"%p, zorder=5)
plt.legend(title='Priority')
plt.grid(axis='both')
plt.show()
5m1hhzi4

5m1hhzi42#

首先,在你的图定义和你实际做的事情之间有一个不匹配:
一个散点图,其中我在y轴上绘制“价格”,在x轴上绘制“重量”
但是你把“价格”画在x轴上,“重量”画在y轴上:

# [...]
plt.scatter(df.Price, df.Weight, c=df.Priority, s=90)
plt.xlabel('Price')
plt.ylabel('Weight')

回到你的主要问题,你已经走上了正确的道路,只要用ListedColormapsee doc here)从颜色列表中定义一个自定义的颜色Map表,它就应该是好的。
这里是一个例子,价格,重量和优先级的假数据(这里只有3个优先级值)

import matplotlib.pyplot as plt 
from matplotlib.colors import ListedColormap
import numpy as np

# Fake data
price = np.random.randint(0, 100, size=(100))
weight = price + np.random.randint(-20, 20, size=(100))
priority = np.random.randint(0, 3, size=(100))

# Create the custom colormap
colors = ["navy", "lawngreen", "red"]
cmap = ListedColormap(colors)

# Scatter with priority as color and the correct colormap
plt.scatter(weight, price, c=priority, cmap=cmap, s=90)

相关问题