使用Pandas数据框绘制Holoviews.Image。

时间:2019-05-03 03:31:34

标签: python plotly bokeh holoviews

我正在尝试对我的低温传输测量结果进行二维彩色绘图。数据被采集并保存在一系列.dat文件中。数据看起来像这样:

B (T), T(K) , V (V), I (A)
0,     4.01, -10.0, 0.001
0,     4.02, -9.9, 0.001
...

每个文件都是在特定磁场下拍摄的。 (0至2个Telsa,步长为0.2T)总共11个文件。我导入了所有文件,并将它们连接到一个大熊猫dataframe中,如下所示:

B, T, V, I
0,4.01,-10.0,0.001
0,4.02,-9.9,0.001
...
0.2,4.01,-10.0,0.001
0.2,4.02,-9.9,0.001
...
0.4,4.01,-10.0,0.001
0.4,4.02,-9.9,0.001
...

现在,我想绘制2D彩色图,其中V和B为x和y轴,I为z(颜色)。我该如何使用Holoview.Image来做到这一点?

我知道可以使用季节性热图完成此操作,但我想使用 holoview 进行交互式绘图和其他功能。它也可以与Holoviews.HeatMap一起使用,但是HeatMap有一些问题。 HeatMap轴是绝对值而不是数值轴,这使得设置xticks,xlim等变得困难且不直观(例如:Changing ticks mark period in Holoviews heatmap

Holoviews.Image更适合我的数据,但它仅接受网格化数据,而不接受像pandas数据框这样的列数据。

简而言之,我想我的问题是如何将pandas dataframe转换为网格数据以便在Holoviews.Image元素中进行绘制。

1 个答案:

答案 0 :(得分:1)

ahuang11在GitHub上回答:https://github.com/pyviz/holoviews/issues/3686#issuecomment-488932024

import pandas as pd
import holoviews as hv
import hvplot.xarray

df = pd.DataFrame({
    'B': [0, 1, 2],
    'T': [2, 3, 4],
    'I': [5, 6, 7]
}).set_index(['B', 'T'])
df.to_xarray().hvplot.image('B', 'T', cmap='RdBu_r')

(我想将V绘制为x轴而不是T,但这没关系)

  1. 使用df.set_index()将用于x和y轴的列设置为索引。
  2. 使用df.to_xarray()将熊猫数据框转换为xarray。
  3. 使用xarray绘制或创建全息视图数据集:
ds = hv.Dataset(df_xarray,['B', 'V'] , 'I')
ds.to(hv.Image, ['B', 'V'], 'I')