ValueError:“c”参数有2个元素,在尝试python matplotlib scatterp时不可使用

2024-09-21 01:00:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着调试我的代码有一段时间了,我需要帮助来绘制散点图。 当我试图绘制它时,它给了我一个错误:

ValueError: 'c' argument has 2 elements, which is not acceptable for use with 'x' with size 48, 'y' with size 48.

数据集:https://data.gov.sg/dataset/monthly-revalidation-of-coe-of-existing-vehicles?view_id=b228d20d-5771-48ec-9d7b-bb52351c0f7d&resource_id=e62a59fd-ee9f-43ec-ac69-58dc5c8045be

我的代码:

import numpy as np        #importing numpy as np declaring as np
import matplotlib.pyplot as plt   #importing matplotlib pyplot as plt

title = "COE revalidation"     #title of the output
titlelen = len(title)   
print("{:*^{titlelen}}".format(title, titlelen=titlelen+6))
print()

recoe = np.genfromtxt("data/annual-revalidation-of-certificate-of-entitlement-coe-of-existing-vehicles.csv",  #loading dataset, storing it as recoe
                      dtype=(int,"U12","U18",int),
                      delimiter=",",
                      names=True)
years = np.unique(recoe["year"])     #extracting unique values from year column, storing it as years
type = np.unique(recoe["type"])      #extracting unique values from type column, storing it as type
category = np.unique(recoe["category"])  #extracting unique values from category column, storing it as category
category5 = recoe[recoe["type"]=="5 Year"]   #extracting coe 5 year, storing it as category5
category10 = recoe[recoe["type"]=="10 Year"]  #extracting coe 10 year, storing it as category10

category5numbers = category5["number"]   #extracting 'number' from category5 and storing it as category5numbers   (number of revalidation , 5 years)
category10numbers = category10["number"]    #extracting 'number' from category10 and storing it as category5numbers   (number of revalidation , 10 years)
    colours =['tab:blue', 'tab:orange'] 

plt.figure(figsize=(7, 6))
plt.scatter(category5numbers,category10numbers,c= colours ,linewidth=1,alpha=0.75,edgecolor='black',s=200)
plt.title("Scatter Plot of category5 versus category10")
plt.xlabel("number of category 5 revalidation")
plt.ylabel("number of category 10 revalidation")
plt.tight_layout()

plt.show()

Tags: offromnumbertitleastypenpit
2条回答

如果我没弄错的话,你试着用两个变量做一个散点图。你不能这么做。但是,如果可以将数据划分为多个因子,则可以传递颜色列表。数据集中的Category列可用于分隔数据。在

表示与“x”和“y”坐标列表的索引相匹配的点。在

现在,让我们来解决这个问题。你会得到:

ValueError: 'c' argument has 2 elements, which is not acceptable for use with 'x' with size 48, 'y' with size 48.

这意味着散点函数中的参数“c”必须与“x”和“y”坐标列表的大小相同(在您的例子中,category5个数字和category10个数字)。不能传递只有2个元素的列表,因为“c”参数的工作方式如下(考虑到您正在放弃为所有点设置相同的颜色,这可以通过将c设置为单一颜色格式字符串来完成)如下:

  • 每个点都将映射到与“xs”、“ys”和“c”列表中的索引匹配的颜色。每个点都必须有一个颜色规格…

也就是说,如果你只给48个点2种颜色,散射函数不知道该怎么做!

scatter docs可以得到'c'可以是。。。在

enter image description here

所以,总结一下,你必须:

  1. 创建一个表示颜色的列表
  2. 用您想要的颜色代表填充所有48个位置
  3. 把它传给散射函数

查看this answer的第一部分,了解如何确定颜色,并理解我说的“x”“y”坐标列表和“c”的大小相同是什么意思。在

相关问题 更多 >

    热门问题