首页 > 解决方案 > 数据着色器为每个日期更改颜色

问题描述

对于带有数据着色器的散点图,我想将时间的概念合并到图中。可能通过使用颜色。

目前,

import numpy as np
import pandas as pd
import seaborn as sns

date_values = ['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-04']
result = []
for d in date_values:
    print(d)
    df = pd.DataFrame(np.random.randn(10000, 2), columns=list('AB'))
    df.columns = ['value_foo', 'value_bar']
    df['dt'] = d
    df['dt'] = pd.to_datetime(df['dt'])
    result.append(df)

df =  pd.concat(result)    
display(df.head())

import holoviews as hv
import holoviews.operation.datashader as hd
hv.extension("bokeh", "matplotlib") 

import datashader as ds
import datashader.transfer_functions as tf


cvs = ds.Canvas().points(df, 'value_foo', 'value_bar')
from colorcet import fire
#tf.set_background(tf.shade(cvs, cmap=fire),"black")
tf.shade(cvs)

#sns.jointplot(x="value_foo", y="value_bar", data=df, hue='dt')

在此处输入图像描述

但是,现在无法区分不同的日期。绘图时如何包含日期信息(例如使用颜色)?

标签: pythonplotholoviewshistogram2ddatashader

解决方案


Datashader 可以使用任何分类列着色。在这里,您只有四个不同的日期,它们已经可以作为分类日期,但是如果您有很多日期,您首先需要将它们放入一组合适的日期范围(例如,如果您的总值小于 256使用 256 色颜色图)。

无论哪种方式,一旦你有一个分类列c,传递agg=ds.count_cat('c')给你的.points()电话,你应该得到一个按日期着色的图。

有关示例,请参见https://examples.pyviz.org/nyc_taxi/中的“pickup_hour”图。


推荐阅读