Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用十六进制颜色代码的多个线条图_Python_Matplotlib_Plot - Fatal编程技术网

Python 使用十六进制颜色代码的多个线条图

Python 使用十六进制颜色代码的多个线条图,python,matplotlib,plot,Python,Matplotlib,Plot,我有一个像这样的数据帧,所以真实的数据帧有300多行: cline endpt fx type colours SF-268 96.5 1 CNS #848B9E 22 SF-268 103.3 2 CNS #848B9E 23 SF-268 60.7 3 CNS #848B9E 24 SF-268 5.0 4 CNS #848

我有一个像这样的数据帧,所以真实的数据帧有300多行:

        cline    endpt  fx     type  colours 
        SF-268   96.5   1       CNS  #848B9E
22      SF-268  103.3   2       CNS  #848B9E
23      SF-268   60.7   3       CNS  #848B9E
24      SF-268    5.0   4       CNS  #848B9E
25      SF-268    8.7   5       CNS  #848B9E
26      SF-268   -9.4   6       CNS  #848B9E
27      SF-268  -20.7   7       CNS  #848B9E
28      SNB-75  105.5   1       CNS  #848B9E
29      SNB-75   94.5   2       CNS  #848B9E
30      SNB-75   35.3   3       CNS  #848B9E
..         ...    ...  ..       ...      ...
71      SW-620   95.6   2     Colon  #468F14
72      SW-620   73.5   3     Colon  #468F14
73      SW-620    4.0   4     Colon  #468F14
74      SW-620    9.7   5     Colon  #468F14
75      SW-620  -58.6   6     Colon  #468F14
76      SW-620  -49.1   7     Colon  #468F14
77    CCRF-CEM   95.8   1  Leukemia  #FF041E
78    CCRF-CEM   96.6   2  Leukemia  #FF041E
79    CCRF-CEM   89.2   3  Leukemia  #FF041E
80    CCRF-CEM    3.5   4  Leukemia  #FF041E
81    CCRF-CEM   13.7   5  Leukemia  #FF041E
82    CCRF-CEM  -21.3   6  Leukemia  #FF041E
83    CCRF-CEM   -6.6   7  Leukemia  #FF041E
84   HL-60(TB)   93.9   1  Leukemia  #FF041E
85   HL-60(TB)   95.3   2  Leukemia  #FF041E
86   HL-60(TB)   94.0   3  Leukemia  #FF041E
87   HL-60(TB)   13.3   4  Leukemia  #FF041E
88   HL-60(TB)   14.6   5  Leukemia  #FF041E
89   HL-60(TB)  -44.0   6  Leukemia  #FF041E
90   HL-60(TB)  -57.0   7  Leukemia  #FF041E
91       K-562   88.1   1  Leukemia  #FF041E
92       K-562   97.1   2  Leukemia  #FF041E
93       K-562   73.6   3  Leukemia  #FF041E
94       K-562    6.6   4  Leukemia  #FF041E
95       K-562    7.0   5  Leukemia  #FF041E
96       K-562  -21.9   6  Leukemia  #FF041E
97       K-562  -29.6   7  Leukemia  #FF041E
98      MOLT-4   98.9   1  Leukemia  #FF041E
99      MOLT-4   96.8   2  Leukemia  #FF041E
100     MOLT-4   68.9   3  Leukemia  #FF041E
我使用以下示例帮助我在底部生成代码:

. 我设法得到了一个图,但是我认为线图将最后一个y值与第一个y值连接起来,在下面形成一个直线图像。我不知道为什么。任何帮助都将不胜感激。谢谢


您的数据似乎未排序,听起来您希望在分组后通过增加x值对数据进行排序:

grp.sort_values(by="fx")

问题是xaxis fx上的值不是单调递增的。因此,当x值从7跳回到1时,直线会向后跳。为了避免这种情况,可以在列表中插入nan,以便在发生跳转的位置绘制。可以这样做

g = lambda x,y: np.insert(y.astype(float), np.arange(len(x)-1)[np.diff(x) < 0]+1, np.nan)
下面显示了使用数据帧的解决方案

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

x = range(1,8)*4
y = np.array([np.exp(-np.arange(1,8)/3.)*i+i/2. for i in np.arange(1,5)/10.]).flatten()
df = pd.DataFrame({"x":x, "y":y})
print df
fig, (ax,ax2) = plt.subplots(ncols=2)

df.plot(x='x',y='y',ax=ax,marker='s')


g = lambda x,y: np.insert(y.astype(float), np.arange(len(x)-1)[np.diff(x) < 0]+1, np.nan)
ax2.plot(g(df.x.values,df.x.values), g(df.x.values,df.y.values),marker='s')
plt.show()
按颜色分组的完整示例:

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

x = range(1,8)*4
y = np.array([np.exp(-np.arange(1,8)/3.)*i+i/2. for i in np.arange(1,5)/10.]).flatten()
df = pd.DataFrame({"x":x, "y":y, "colours": ["#aa0000"]*len(x)})
x2 = range(1,6)*3
y2 = np.array([np.exp(-np.arange(1,6)/2.5)*i+i/2.1 for i in np.arange(1,4)/10.]).flatten()
df2 = pd.DataFrame({"x":x2, "y":y2, "colours": ["#0000aa"]*len(x2)})
df = df.append(df2)


fig, ax = plt.subplots()

g = lambda x,y: np.insert(y.astype(float), np.arange(len(x)-1)[np.diff(x) < 0]+1, np.nan)

for key, grp in df.groupby(['colours']):
    ax.plot(g(grp.x.values,grp.x.values), g(grp.x.values,grp.y.values),
            marker='s', color=key, label=key)

ax.legend()
plt.show()

所需的绘图应该是什么样的?它不应该是直线,而应该是参差不齐的参差不齐的线条。感谢您的建议:我可以问一下,如何在数据帧中的行之间添加NaN,而不仅仅是一列。我需要这样做,这样我就可以维护colorset列来对线条图进行颜色协调。我能够按照您的建议在每第8行添加NaN。我引用了以下内容:。但是,我仍然得到了连接到第一个点的直线。这里介绍的想法不是操纵数据帧,而是使用插入的值创建新的numpy数组,然后使用matplotlib plot函数进行打印。每个绘图的颜色将是问题示例中的关键。虽然像您链接到的解决方案可能也可以,但我如何知道哪里出了问题?我假设您需要在行中插入nan以获得相同的维度数据帧,这就是我引用另一个问题的原因。你的代码看起来很棒,但我不知道如何正确地实现它。这就是我尝试的:ax.plotgdfm['fx'].values,dfm['fx'].values,gdfm['fx'].values,dfm['endpt'].values,marker='s',我得到:TypeError:'axesssubplot'对象不可编辑。所以我发现我输入了plot.subplot,所以现在它可以正确地打印,但我仍然不知道如何正确地显示颜色。我得到这个错误:ValueError:长度不匹配:预期轴有35个元素,新值有279个元素。这不是因为dataframe维度与插入的nan维度不同吗?嗨,谢谢你的建议。我的每个测线图都需要x轴的7个“fx”值和y轴的7个“endpt”值。当我对它进行排序时,matplotlib只是将所有东西连接在一起,这不是我想要的好吧,很抱歉,我没有完全理解您想要的。你不能先按每一行来分组吗。您的数据看起来可以按渐变分组并使用颜色键。或者,您可以首先通过上面答案中提供的diff方法找到组,然后使用该方法进行分组,如果您想以更类似于熊猫的方式进行求解。
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

x = range(1,8)*4
y = np.array([np.exp(-np.arange(1,8)/3.)*i+i/2. for i in np.arange(1,5)/10.]).flatten()
df = pd.DataFrame({"x":x, "y":y})
print df
fig, (ax,ax2) = plt.subplots(ncols=2)

df.plot(x='x',y='y',ax=ax,marker='s')


g = lambda x,y: np.insert(y.astype(float), np.arange(len(x)-1)[np.diff(x) < 0]+1, np.nan)
ax2.plot(g(df.x.values,df.x.values), g(df.x.values,df.y.values),marker='s')
plt.show()
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

x = range(1,8)*4
y = np.array([np.exp(-np.arange(1,8)/3.)*i+i/2. for i in np.arange(1,5)/10.]).flatten()
df = pd.DataFrame({"x":x, "y":y, "colours": ["#aa0000"]*len(x)})
x2 = range(1,6)*3
y2 = np.array([np.exp(-np.arange(1,6)/2.5)*i+i/2.1 for i in np.arange(1,4)/10.]).flatten()
df2 = pd.DataFrame({"x":x2, "y":y2, "colours": ["#0000aa"]*len(x2)})
df = df.append(df2)


fig, ax = plt.subplots()

g = lambda x,y: np.insert(y.astype(float), np.arange(len(x)-1)[np.diff(x) < 0]+1, np.nan)

for key, grp in df.groupby(['colours']):
    ax.plot(g(grp.x.values,grp.x.values), g(grp.x.values,grp.y.values),
            marker='s', color=key, label=key)

ax.legend()
plt.show()