python - 序列索引图 python

标签 python matplotlib seaborn

我正在尝试绘制一组时间排序值的序列,其中每个值都由不同的颜色表示。例如,如果我的值(value)观是这样的

state_seq = [2, 2, 2, 2, 0, 0, 0, 1, 3, 6, 3, 3, 3, 0, 0]
time_seq = ['2013-05-29 09:31:00', '2013-05-29 09:46:00', '2013-07-23 12:28:00', '2013-07-23 01:53:00', '2013-08-05 02:02:00', '2013-08-05 02:08:00', '2013-08-05 04:28:00', '2013-08-06 10:20:00', '2013-08-06 03:03:00', '2013-08-06 04:13:00', '2013-08-06 04:17:00', '2013-08-06 04:36:00', '2013-08-07 11:07:00', '2013-08-07 12:28:00', '2013-08-07 12:31:00']

我希望 state_seq 的每个唯一元素用颜色表示并绘制序列。截至目前,我正在使用seaborn palplot 以一种简单的方式完成此任务,例如,

color_set = ["#95a5a6", "#34495e","#9b59b6", "#3498db", "#800000", "#2ecc71", 'y', '#FF4500']
palette = list()
for s in state_seq:
  palette.append(color_set[s])    

sns.palplot(palette)

这给了我这样的东西(这个输出可能与代码片段不完全匹配 - 我编辑了代码以获得更好的清晰度) Sequence from seaborn pal plot

这种方法有一个缺点,就是我无法在 x 轴上表示我的时间标签。是否有更好的 python 替代方案,可能类似于此处解释的 R 包 TraMineR Is it possible to make a graph with pattern fills using TraMineR and R base graphs?

最佳答案

我假设您希望每个值都有方框,而不管每个值之间的时间间隔如何。要获得指示时间间隙的宽度,您可以 convert time_seq to datetime objects然后直接用 matplotlib 绘制日期。

import matplotlib.pyplot as plt
import numpy as np

state_seq = [2, 2, 2, 2, 0, 0, 0, 1, 3, 6, 3, 3, 3, 0, 0]
time_seq = ['2013-05-29 09:31:00', '2013-05-29 09:46:00', '2013-07-23 12:28:00', '2013-07-23 01:53:00', '2013-08-05 02:02:00', '2013-08-05 02:08:00', '2013-08-05 04:28:00', '2013-08-06 10:20:00', '2013-08-06 03:03:00', '2013-08-06 04:13:00', '2013-08-06 04:17:00', '2013-08-06 04:36:00', '2013-08-07 11:07:00', '2013-08-07 12:28:00', '2013-08-07 12:31:00']
color_set = ["#95a5a6", "#34495e","#9b59b6", "#3498db", "#800000", "#2ecc71", 'y', '#FF4500']

for i in range(len(time_seq)):
    # fill the yaxis with our colour for each time_seq entry for width 1
    plt.fill_between((i,i+1), 1, color=color_set[state_seq[i]])

# keep the coloured boxes square
plt.axis("scaled")

plt.xlim(0, len(time_seq))
plt.axes().get_yaxis().set_visible(False)

# add custom tick labels based on time_seq and set to middle of boxes
plt.xticks(np.arange(0.5,len(time_seq)+0.5, 1),  time_seq, rotation='vertical')
# remove xaxis ticks
plt.axes().get_xaxis().set_ticks_position("none")

plt.savefig("boxes.png", bbox_inches="tight")

生产: enter image description here

关于python - 序列索引图 python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38786935/

相关文章:

python - 如何修复此与 Python 中的模块相关的错误?

python - 在 Python 3 中将逗号分隔的字符串转换为 Numpy 数组

python - 为不同的类别级别绘制不同的颜色

python - Python + scipy 中 sigmoid 回归的参数

python - Django 页面的 ListView 过滤器

python - 用pex打包本地模块

python - Matplotlib 离散颜色条

python seaborn 为jointplot设置xlim和ylim并去掉上方和右侧的分布信息

matplotlib - Seaborn Stripplot 基于色调/调色板设置边缘颜色

python - 如何为 Pandas 数据框中的每一列制作一个seaborn distplot?