Python新手晋级路 2023-07-19 22:33 采纳率: 58.3%
浏览 18
已结题

Python用matplotlib库制作散点图

Python用matplotlib库制作散点图,有三列数据,如下所示,前两列数据分别作X轴、Y轴,剩余一列数据通过点的颜色渐变来表示不同的数据,在一开始,我将第三列数据(以列表形式)传递给scatte()的形参c引发报错,所以我也不知道该怎样办了。

img


这是我现在的代码:

from matplotlib.font_manager import FontProperties
import matplotlib.pyplot as plt
import matplotlib.pyplot as mp
import csv
import Functions


font = FontProperties(fname=r"c:\\windows\\fonts\\simsun.ttc")

plt.rcParams['font.family'] = ['sans-serif']
plt.rcParams['font.sans-serif'] = ['SimHei']


filename = '..\\节气与舌象.csv'

x_v = []
y_v = []
color_v = []
with open(filename, encoding='gbk') as file:
    reader = csv.reader(file)

    for row in reader:
        x_v.append(row[0])
        y_v.append(row[1])
        color_v.append(row[2])
color = Functions.transform_list_to_numpy(color_v)
# mp.style.use('seaborn') 发生警告,并且错误显示
fig, ax = mp.subplots()
ax.scatter(x_v, y_v, c=color, cmap=mp.cm.Blues, s=10)  # c=color, cmap=mp.cm.Blues
ax.set_title('节气与舌象', fontsize=15, fontproperties=font)
ax.set_ylabel('舌象', fontsize=1, fontproperties=font)
ax.set_xlabel('节气', fontsize=10, fontproperties=font)
ax.tick_params(axis='both', which='major', labelsize=5)
mp.show()
# mp.savefig('节气与舌象.png', bbox_inches='tight')'
x_v = []
y_v = []
color_v = []
with open(filename, encoding='gbk') as file:
    reader = csv.reader(file)

    for row in reader:
        x_v.append(row[0])
        y_v.append(row[1])
        color_v.append(row[2])
color = Functions.transform_list_to_numpy(color_v)
# mp.style.use('seaborn') 发生警告,并且错误显示
fig, ax = mp.subplots()
ax.scatter(x_v, y_v, c=color, cmap=mp.cm.Blues, s=10)  # c=color, cmap=mp.cm.Blues
ax.set_title('节气与舌象', fontsize=15, fontproperties=font)
ax.set_ylabel('舌象', fontsize=1, fontproperties=font)
ax.set_xlabel('节气', fontsize=10, fontproperties=font)
ax.tick_params(axis='both', which='major', labelsize=5)
mp.show()
# mp.savefig('节气与舌象.png', bbox_inches='tight')

相关文件:Functions.py

import numpy as np


def transform_list_to_numpy(list_val: list):
    matrix = np.ndarray(list_val)
    return matrix

注:图片中的文件只是数据样式示例
请各位指点!

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-07-20 09:18
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 以下回答来自chatgpt:

      根据参考资料和代码,可知使用scatter()函数绘制散点图时,c参数需要传递一个表示颜色的数组。在你的代码中使用的第三列数据colors是一个代表颜色渐变的数组,但是scatter()函数的c参数只接受表示颜色的字符串或数值,而不支持渐变数组。因此,需要对第三列数据进行处理,将其转换为表示颜色的字符串或数值。

      一种解决方案是将颜色数据映射为固定的字符串或数值,可以使用线性映射的方法将colors中的数值映射到固定的范围内,再将映射后的结果传递给scatter()函数的c参数。下面是具体的解决方案和代码示例:

      1. 导入所需的库:
      import matplotlib.pyplot as plt
      import numpy as np
      
      1. 定义数据:
      x = [1, 2, 3, 4, 5]
      y = [10, 20, 30, 40, 50]
      colors = [0.1, 0.3, 0.5, 0.7, 0.9]  # 第三列数据,表示颜色渐变
      
      1. 将颜色数据线性映射到固定的范围内(例如0到1),使用numpy的interp()函数:
      color_range = np.linspace(0, 1, len(colors))  # 生成指定范围内的数值
      c_values = np.interp(colors, color_range, (0, 1))  # 将颜色数据映射到0到1的范围内
      
      1. 制作散点图并传递映射后的颜色数据给scatter()函数的c参数:
      plt.scatter(x, y, c=c_values)
      
      1. 显示图形:
      plt.show()
      

      通过将颜色数据映射为固定的字符串或数值,可以解决scatter()函数的c参数不能接受颜色渐变数组的问题。希望这个解决方案能帮助到你!如果还有其他问题,可以随时追问。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月28日
  • 修改了问题 7月20日
  • 创建了问题 7月19日

悬赏问题

  • ¥15 matlab数据降噪处理,提高数据的可信度,确保峰值信号的不损失?
  • ¥15 怎么看我在bios每次修改的日志
  • ¥15 python+mysql图书管理系统
  • ¥15 Questasim Error: (vcom-13)
  • ¥15 船舶旋回实验matlab
  • ¥30 SQL 数组,游标,递归覆盖原值
  • ¥15 为什么我的数据接收的那么慢呀有没有完整的 hal 库并 代码呀有的话能不能发我一份并且我用 printf 函数显示处理之后的数据,用 debug 就不能运行了呢
  • ¥20 gitlab 中文路径,无法下载
  • ¥15 用动态规划算法均分纸牌
  • ¥30 udp socket,bind 0.0.0.0 ,如何自动选取用户访问的服务器IP来回复数据