Python 如何用不同的颜色为每行绘制特定数据帧的切片?

Python 如何用不同的颜色为每行绘制特定数据帧的切片?,python,pandas,matplotlib,plot,indexing,Python,Pandas,Matplotlib,Plot,Indexing,我想用不同的颜色为每一行(基于行索引)绘制熊猫数据帧的某些片段 我的数据如下所示: 我已经试着在这个帮助下找到一种方法,但我没能找到——可能是因为缺乏技能 import pandas as pd import numpy as np import matplotlib.pyplot as plt df = pd.read_csv("D:\SOF10.csv" , header=None) df.head() #Slice interested data C = df.iloc[:, 2::

我想用不同的颜色为每一行(基于行索引)绘制
熊猫数据帧的某些片段

我的数据如下所示:

我已经试着在这个帮助下找到一种方法,但我没能找到——可能是因为缺乏技能

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.read_csv("D:\SOF10.csv" , header=None)
df.head()

#Slice interested data
C = df.iloc[:, 2::3]

#Plot Temp base on row index colorfully
C.apply(lambda x: plt.scatter(x.index, x, c='g'))
plt.show()

以下是我预期的情节:

我还想知道我是否可以替换每行切片数据的平均值,这些数据在绘图或绘图旁边的图例中包含480个值!是否可以(如下图)计算图例中某个位置的平均值和位移,或者在图表中自己的数据旁边使用小字体的位移


数据样本:

这可能是一个近似答案<代码>散射(c=,cmap=
可用于所需的着色

import pandas as pd
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import itertools

df = pd.DataFrame({'a':[34,22,1,34]})
fig, subplot_axes = plt.subplots(1, 1, figsize=(20, 10))  # width, height

colors = ['red','green','blue','purple']
cmap=matplotlib.colors.ListedColormap(colors)

for col in df.columns:
    subplot_axes.scatter(df.index, df[col].values, c=df.index, cmap=cmap, alpha=.9)

这可能是一个近似答案。
scatter(c=,cmap=
可用于所需的着色

import pandas as pd
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import itertools

df = pd.DataFrame({'a':[34,22,1,34]})
fig, subplot_axes = plt.subplots(1, 1, figsize=(20, 10))  # width, height

colors = ['red','green','blue','purple']
cmap=matplotlib.colors.ListedColormap(colors)

for col in df.columns:
    subplot_axes.scatter(df.index, df[col].values, c=df.index, cmap=cmap, alpha=.9)

这使得情节没有传奇

C = df.iloc[:,2::3].stack().reset_index()
C.columns = ['level_0', 'level_1', 'Temperature']

fig, ax = plt.subplots(1,1)
C.plot('level_0', 'Temperature', 
       ax=ax, kind='scatter', 
       c='level_0', colormap='tab20', 
       colorbar=False, legend=True)
ax.set_xlabel('Cycles')
plt.show()
编辑以反映修改后的问题:

  • stack()
  • reset_index()
    将上面的双级索引重置为
    level_0
    (行),
    level_1
    (列)
  • set\u xlabel
    根据需要设置x轴的标签
  • 编辑2:以下将生成带有图例的散点:

    CC = df.iloc[:,2::3]
    
    fig, ax = plt.subplots(1,1, figsize=(16,9))
    labels = CC.mean(axis=1)
    
    for i in CC.index:
        ax.scatter([i]*len(CC.columns[1:]), CC.iloc[i,1:], label=labels[i])
    
    ax.legend()
    ax.set_xlabel('Cycles')
    ax.set_ylabel('Temperature')
    plt.show()
    

    这使得情节没有传奇

    C = df.iloc[:,2::3].stack().reset_index()
    C.columns = ['level_0', 'level_1', 'Temperature']
    
    fig, ax = plt.subplots(1,1)
    C.plot('level_0', 'Temperature', 
           ax=ax, kind='scatter', 
           c='level_0', colormap='tab20', 
           colorbar=False, legend=True)
    ax.set_xlabel('Cycles')
    plt.show()
    
    编辑以反映修改后的问题:

  • stack()
  • reset_index()
    将上面的双级索引重置为
    level_0
    (行),
    level_1
    (列)
  • set\u xlabel
    根据需要设置x轴的标签
  • 编辑2:以下将生成带有图例的散点:

    CC = df.iloc[:,2::3]
    
    fig, ax = plt.subplots(1,1, figsize=(16,9))
    labels = CC.mean(axis=1)
    
    for i in CC.index:
        ax.scatter([i]*len(CC.columns[1:]), CC.iloc[i,1:], label=labels[i])
    
    ax.legend()
    ax.set_xlabel('Cycles')
    ax.set_ylabel('Temperature')
    plt.show()
    


    试着在
    c.apply(lambda x:plt.scatter(x.index,x,c='g'))中删除'c='g',
    @QuangHoang嗨,我已经做了,我更新了图片,但是可以看到它不是我想要的。这是因为你没有正确地分割/处理数据,而不是因为你将如何绘制它。
    c=df.iloc[,2::3]
    仍然保留切片列的索引。因此所有绘制的序列共享相同的索引。这就是为什么您看到所有点交错而不是分开的原因。@QuangHoang哦,我明白了,那么您的建议是什么?我如何修复它?有什么补救办法吗?尝试在
    c.apply(lambda x:plt.scatter(x.index,x,c='g')中删除'c='g')
    @QuangHoang嗨,我已经更新了图片,但可以看出这不是我想要的。这是因为你没有正确地分割/处理数据,而不是因为你将如何绘制它。
    C=df.iloc[:,2::3]
    仍然保留切片列的索引。因此,所有绘制的系列都共享相同的索引。这就是为什么您看到所有点交错而不是分开的原因。@QuangHoang哦,我明白了,那么您的建议是什么?我如何修复它?有什么补救措施吗?这是按列着色。问题是希望标记按顺序着色列中的位置(索引)。您好,谢谢您的回答。问题是关于访问所需数据或根据行索引打印数据。行已更新为使用df.index中的颜色。@Quan Hoang提供了一个更简洁的答案。您的答案的输出与我的预期结果完全不同,因为它显示彩色列!我刚刚更新了预期结果图片hope它更好地转移了我的思维方式!这是按列着色。问题是要根据标记在列(索引)中的顺序位置来着色。您好,谢谢您的回答。问题是关于访问所需数据或根据行索引打印数据。行已更新为使用df.index中的颜色。@Quan Hoang提供了一个更简洁的答案。您的答案的输出与我的预期结果完全不同,因为它显示彩色列!我刚刚更新了预期结果图片hope它更好地转移了我的思维方式!当我想用不同的颜色绘制每一行时,输出没有达到我的预期结果!我可以请你再次检查输出图片吗?你确定每一行是一种颜色还是每一列是一种颜色吗?当然,每一行先生!我还在帖子中提供了数据样本,你可以绘制它。你回答的结果是与我的期望相去甚远,尽管颜色丰富,x轴不基于从0到40的行索引,但我有点不知道您想要什么。您可以尝试在
    堆栈()之前删除
    .t
    然后尝试用
    'level\u 0'
    替换
    'idx'
    内部
    绘图
    。我现在无法访问google drive。当我想用不同的颜色绘制每一行时,输出没有达到我的预期结果!我可以请你再次查看输出图片吗?你确定每一行是一种颜色还是每一列是一种颜色?确定每一行吗先生!我还在文章中提供了数据样本,您可以绘制它。您的答案的结果与我的预期相差甚远,尽管颜色鲜艳,x轴不是基于从0到40的行索引。我有点不知道您想要什么。您可以尝试在
    堆栈()之前删除
    .t
    并尝试将
    'idx'
    内部
    绘图
    替换为
    'level\u 0'
    。我现在无法访问google drive。