You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用SymPy绘制Pandas DataFrame?新手技术求助

解决SymPy绘制DataFrame文本数据点并连接坐标轴的问题

你的核心问题是直接用字符串(如"Lionel Messi"、"Argentina")作为坐标值,SymPy的绘图系统无法处理非数值坐标。需要先将文本标签映射为数值位置,再绘制点和连线,同时替换坐标轴刻度为文本标签。

以下是修正后的代码:

from sympy.plotting import plot
import pandas as pd
from sympy import symbols

# 定义符号和函数
x = symbols("x")
ekpr = x

# 创建DataFrame
data = {
   "name": ["Lionel Messi", "Cristiano Ronaldo"],
   "country": ["Argentina", "Portugal"]
}
df = pd.DataFrame(data, columns=["name", "country"])

# 建立文本到数值的映射(自定义位置,可根据需求调整)
name_to_x = {name: idx+1 for idx, name in enumerate(df["name"].unique())}
country_to_y = {country: idx+1 for idx, country in enumerate(df["country"].unique())}

# 获取目标数据点的数值坐标
target_name = df.loc[0, "name"]
target_country = df.loc[0, "country"]
point_x = name_to_x[target_name]
point_y = country_to_y[target_country]

# 准备标记和连线:点 + 到x轴、y轴的虚线
markers = []
# 绘制数据点
markers.append({'args': [[point_x], [point_y], 'ro']})
# 绘制到x轴的连线(从点到(x, 0))
markers.append({'args': [[point_x, point_x], [point_y, 0], 'r--']})
# 绘制到y轴的连线(从点到(0, y))
markers.append({'args': [[point_x, 0], [point_y, point_y], 'r--']})

# 绘制图像,设置坐标轴范围和刻度
p = plot(ekpr, xlim=[0, len(name_to_x)+1], ylim=[0, len(country_to_y)+1], markers=markers, show=False)

# 替换x轴刻度为名字
p.xaxis.set_ticks(list(name_to_x.values()))
p.xaxis.set_ticklabels(list(name_to_x.keys()))
# 替换y轴刻度为国家
p.yaxis.set_ticks(list(country_to_y.values()))
p.yaxis.set_ticklabels(list(country_to_y.keys()))

p.show()

关键说明:

  • 文本-数值映射:用字典将每个唯一的名字/国家映射到一个数值位置,让SymPy可以识别坐标。
  • 连线构造:分别绘制从数据点到(point_x, 0)(x轴)和(0, point_y)(y轴)的虚线,确保连线正确连接坐标轴。
  • 刻度替换:将坐标轴的数值刻度替换为对应的文本标签,让图表更直观。

内容的提问来源于stack exchange,提问作者Fahrizal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 22:10:30