gpt4 book ai didi

python - Pandas 中连续数据的平行坐标图

转载 作者:太空宇宙 更新时间:2023-11-03 13:17:55 24 4
gpt4 key购买 nike

pandas 的 parallel_coordinates 函数非常有用:

import pandas
import matplotlib.pyplot as plt
from pandas.tools.plotting import parallel_coordinates
sampdata = read_csv('/usr/local/lib/python3.3/dist-packages/pandas/tests/data/iris.csv')
parallel_coordinates(sampdata, 'Name')

enter image description here

但是当你有连续数据时,它的行为不是你所期望的:

mypos = np.random.randint(10, size=(100, 2))
mydata = DataFrame(mypos, columns=['x', 'y'])
myres = np.random.rand(100, 1)
mydata['res'] = myres
parallel_coordinates(mydata, 'res')

enter image description here

我想要线条的颜色来反射(reflect)幅度连续变量的,例如在从白到黑的渐变中,最好也有一些透明度的可能性(阿尔法值),旁边有一个颜色条。

最佳答案

我今天遇到了完全相同的问题。我的解决方案是从 pandas 复制 parallel_coordinates 并根据我的特殊需要进行调整。因为我认为它对其他人有用,所以这是我的实现:

def parallel_coordinates(frame, class_column, cols=None, ax=None, color=None,
use_columns=False, xticks=None, colormap=None,
**kwds):
import matplotlib.pyplot as plt
import matplotlib as mpl

n = len(frame)
class_col = frame[class_column]
class_min = np.amin(class_col)
class_max = np.amax(class_col)

if cols is None:
df = frame.drop(class_column, axis=1)
else:
df = frame[cols]

used_legends = set([])

ncols = len(df.columns)

# determine values to use for xticks
if use_columns is True:
if not np.all(np.isreal(list(df.columns))):
raise ValueError('Columns must be numeric to be used as xticks')
x = df.columns
elif xticks is not None:
if not np.all(np.isreal(xticks)):
raise ValueError('xticks specified must be numeric')
elif len(xticks) != ncols:
raise ValueError('Length of xticks must match number of columns')
x = xticks
else:
x = range(ncols)

fig = plt.figure()
ax = plt.gca()

Colorm = plt.get_cmap(colormap)

for i in range(n):
y = df.iloc[i].values
kls = class_col.iat[i]
ax.plot(x, y, color=Colorm((kls - class_min)/(class_max-class_min)), **kwds)

for i in x:
ax.axvline(i, linewidth=1, color='black')

ax.set_xticks(x)
ax.set_xticklabels(df.columns)
ax.set_xlim(x[0], x[-1])
ax.legend(loc='upper right')
ax.grid()

bounds = np.linspace(class_min,class_max,10)
cax,_ = mpl.colorbar.make_axes(ax)
cb = mpl.colorbar.ColorbarBase(cax, cmap=Colorm, spacing='proportional', ticks=bounds, boundaries=bounds, format='%.2f')

return fig

我不知道它是否适用于 pandas 原始功能提供的每个选项。但是对于你的例子,它给出了这样的东西:

parallel_coordinates(mydata, 'res', colormap="binary")

Example from question

您可以通过更改上一个函数中的这一行来添加 alpha 值:

ax.plot(x, y, color=Colorm((kls - class_min)/(class_max-class_min)), alpha=(kls - class_min)/(class_max-class_min), **kwds)

对于 pandas 原始示例,删除名称并使用最后一列作为值:

sampdata = read_csv('iris_modified.csv')
parallel_coordinates(sampdata, 'Value')

Example from pandas documentation

希望对您有所帮助!

克里斯托夫

关于python - Pandas 中连续数据的平行坐标图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23547347/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com