我想为一个pandas
数据帧绘制平行坐标,该数据帧包含带数字的列和其他包含字符串作为值的列。
问题描述
我有以下测试代码,可用于绘制带有数字的平行坐标:
import pandas as pd
import matplotlib.pyplot as plt
from pandas.tools.plotting import parallel_coordinates
df = pd.DataFrame([["line 1",20,30,100],\
["line 2",10,40,90],["line 3",10,35,120]],\
columns=["element","var 1","var 2","var 3"])
parallel_coordinates(df,"element")
plt.show()
不过,我想尝试的是在我的图中添加一些有字符串的变量。但当我运行以下代码时:
df2 = pd.DataFrame([["line 1",20,30,100,"N"],\
["line 2",10,40,90,"N"],["line 3",10,35,120,"N-1"]],\
columns=["element","var 1","var 2","var 3","regime"])
parallel_coordinates(df2,"element")
plt.show()
我得到这个错误:
ValueError: invalid literal for float(): N
我想这意味着parallel_coordinates
函数不接受字符串。
我正在尝试做的事情的示例
我正试图做这样的事情,种族和性别是字符串,而不是数字:
问题
有没有任何方法可以使用pandas
parallel_coordinates
来执行这样的图形?如果没有,我怎么能尝试这样的图形?也许和matplotlib
一起?
我必须提到的是,我正在使用pandas版本的Python 2.5下寻找解决方案。
我不太清楚你想用
regime
列做什么。如果问题只是它的存在阻止了绘图的显示,那么您可以简单地从绘图中忽略有问题的列:
看看你提供的例子,我知道你希望分类变量以某种方式放置在一条垂直线上,并且分类的每个值都由不同的y值表示。我说得对吗?
如果是,则需要将分类变量(此处,
regime
)编码为数值。为此,我使用了这个技巧I found on this website。这段代码创建了一个新列(
regime_encoded
),其中category机制的每个值都由一个整数编码。然后可以打印新的数据帧,包括新创建的列:问题是分类变量(0,1)的编码值与其他变量的范围无关,因此所有行似乎都趋向于同一点。然后,答案是将编码与数据范围进行比较(这里我做的非常简单,因为数据的范围是0到120之间的,如果实际数据帧中不是这样的话,可能需要从最小值进行缩放)。
为了更好地适应示例,可以添加注释:
基于@Diziet answer,为了能够在Python2.5下获得所需的图,我们可以使用以下代码:
最终将显示以下图表:
相关问题 更多 >
编程相关推荐