当我使用 Pandas 时,df.plot()它有 matplotlib 作为默认绘图后端。但这会创建静态图。
我想要交互式绘图,所以我必须更改熊猫绘图背景。
当我使用 .plot() 时,如何更改 Pandas 的绘图后端以使用不同的库来创建我的绘图?
我今天刚刚开始使用 hvPlot,作为面板的一部分。
\n我很难弄清楚如何在我的图中禁用科学记数法。例如,这是一个简单的条形图。轴和工具尖采用科学记数法。如何将格式更改为简单 int?
\n\n我正在向非数字和非技术管理人员展示这一点。他们宁愿只看到基本整数,而我不想向他们解释科学计数法是什么。
\n我在文档中找不到任何可以帮助我的内容:https ://hvplot.holoviz.org/user_guide/Customization.html
\nI\xe2\x80\x99ve 还尝试拼凑 Bokeh 文档中的建议。
\n我无法弄清楚\xe2\x80\x99。请帮忙!谢谢
\n我的简单 df:
\n local_date amount\n0 Jan 19 506124.98\n1 Feb 19 536687.28\n2 Mar 19 652279.31\n3 Apr 19 629440.06\n4 May 19 703527.00\n5 Jun 19 724234.08\n6 Jul 19 733413.32\n7 Aug 19 758647.44\n8 Sep 19 782676.16\n9 Oct 19 833674.28\n10 Nov 19 864649.74\n11 Dec 19 849920.47\n12 Jan 20 857732.52\n13 Feb 20 927399.50\n14 Mar 20 1152440.49\n15 Apr 20 1285779.35\n16 May 20 1431744.76\n17 Jun 20 1351893.95\n18 Jul …Run Code Online (Sandbox Code Playgroud) 我想使用 Holoviews/hvplot 基于一维将多个数据绘制到网格中,其中包含多个唯一的数据点。
考虑这个例子:
import seaborn as sns
import hvplot.pandas
iris = sns.load_dataset('iris')
plot = iris.hvplot.scatter(x="sepal_length", y="sepal_width", col="species")
hvplot.show(plot)
Run Code Online (Sandbox Code Playgroud)
上面的代码根据鸢尾花数据集的物种部分创建了几个图,结果如下图:

但现在想象一下,这里不是 3 个不同的物种,而是 20 个。情节会变得很宽,所以我想在几个情节之后打破界限。但我找不到任何“最大列”参数。普通网格需要另一列来定义我没有的行。
任何建议都会有所帮助。
我一直在尝试了解如何完成绘制两个数据集(每个数据集具有不同颜色)这一非常简单的任务,但我在网上发现的任何内容似乎都无法做到这一点。这是一些示例代码:
import pandas as pd
import numpy as np
import holoviews as hv
from holoviews import opts
hv.extension('bokeh')
ds1x = np.random.randn(1000)
ds1y = np.random.randn(1000)
ds2x = np.random.randn(1000) * 1.5
ds2y = np.random.randn(1000) + 1
ds1 = pd.DataFrame({'dsx' : ds1x, 'dsy' : ds1y})
ds2 = pd.DataFrame({'dsx' : ds2x, 'dsy' : ds2y})
ds1['source'] = ['ds1'] * len(ds1.index)
ds2['source'] = ['ds2'] * len(ds2.index)
ds = pd.concat([ds1, ds2])
Run Code Online (Sandbox Code Playgroud)
目标是在单个框架中生成两个数据集,并用一个分类列来跟踪源。然后我尝试绘制散点图。
scatter = hv.Scatter(ds, 'dsx', 'dsy')
scatter
Run Code Online (Sandbox Code Playgroud)
这按预期工作。但我似乎无法理解如何根据source列对两个数据集进行不同的着色。我尝试了以下方法:
scatter = hv.Scatter(ds, 'dsx', 'dsy', color='source') …
我想为 hvplots 生成的图设置默认选项。
通常在全息视图中我会这样做来为每个图设置默认值:
import holoviews as hv
from holoviews import opts
hv.extension('bokeh')
opts.defaults(opts.Curve( height=400, width=900 ,show_grid=True))
Run Code Online (Sandbox Code Playgroud)
现在我正在使用 hvplots,导入已成为基于 xarray 的绘图的以下内容
import xarray as xr
import hvplot.xarray
Run Code Online (Sandbox Code Playgroud)
如果我有一个 xarray 数据集并且我想绘制其中一个维度,那么我使用这个
ds.myDims.hvplot()
Run Code Online (Sandbox Code Playgroud)
然而,这给出了一个具有默认宽度且没有网格线的图。要添加它,我需要指定绘图的选项。
ds.myDims.hvplot(height=400, width=900,grid=True)
Run Code Online (Sandbox Code Playgroud)
理想情况下,我想全局设置高度、宽度、网格等,就像在全息视图中一样,所以我不必为每个绘图指定它。
和包一起工作streamz,hvplot为使用 pandas 数据帧绘制流数据提供支持。
例如,该streamz包有一个用于创建随机流数据帧的便利实用程序:
import hvplot.streamz
from streamz.dataframe import Random
sdf = Random(interval='200ms', freq='50ms')
sdf
# Stop the streaming with: sdf.stop()
Run Code Online (Sandbox Code Playgroud)
可以使用以下命令在流图表中简单地绘制此图hvplot:
sdf.hvplot()
Run Code Online (Sandbox Code Playgroud)
是否有一种简单的方法可以从预先存在的pandas数据帧中传输数据?
例如,我希望能够这样说:
import pandas as pd
df=pd.DataFrame({'a':range(0,100),'b':range(5,105)})
sdf = StreamingDataFrame(df, interval='200ms', freq='50ms')
Run Code Online (Sandbox Code Playgroud)
然后,我可以简单地使用预先存在的pandas数据帧中的示例数据,而不是使用随机示例数据。
我的 hvplot 有默认的平移和滚轮缩放作为缩放和移动图形的方式。
但我希望框缩放成为我的图表中的默认值。
如何在 hvplot 或 Holoviews 中执行此操作?
import numpy as np
import pandas as pd
import holoviews as hv
import hvplot
import hvplot.pandas
df = pd.DataFrame(data=np.random.normal(size=[50, 2]), columns=['a', 'b'])
df_plot = df.hvplot.scatter(x='a', y='b')
Run Code Online (Sandbox Code Playgroud)
以下代码生成链接图像。它生成的大部分是我想要的,但我希望 Real 和 Pred 之间的框颜色不同。我该如何使用 Holoviews 或 Hvplot 来做到这一点?
import hvplot.pandas
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(20), columns=['Value'])
df['Source'] = ['Preds'] *10 +['Real'] * 10
df['Item'] = ['item1'] *5 + ['item2']*5 + ['item1'] *5 + ['item2']*5
df.hvplot.box(y='Value', by=['Item', 'Source'])
Run Code Online (Sandbox Code Playgroud)
我希望该图像的第一张图具有第二张图的风格
关于 HoloViews 分组(非堆叠)条形图的快速问题。如何删除 x 轴变量名称刻度,但将它们包含在图例中?
请参阅下面的示例:
我想做以下事情:
代码如下:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
import holoviews as hv
pd.options.plotting.backend = 'holoviews'
df1 = pd.DataFrame({
'x': np.random.rand(10),
'y': np.random.rand(10),
})
my_plot = df1.plot(kind='bar')
my_plot
Run Code Online (Sandbox Code Playgroud)
谢谢你!
我尝试创建分组条形图,但无法弄清楚如何影响条形图的顺序。
给定这些示例数据:
import pandas as pd
import hvplot.pandas
df = pd.DataFrame({
"lu": [200, 100, 10],
"le": [220, 80, 130],
"la": [60, 20, 15],
"group": [1, 2, 2],
})
df = df.groupby("group").sum()
Run Code Online (Sandbox Code Playgroud)
我想创建一个水平分组条形图,显示两个组 1 和 2 以及所有三列。列应按“le”、“la”和“lu”的顺序出现。
当然,我会尝试使用 Hvplot:
df.hvplot.barh(x = "group", y = ["le", "la", "lu"])
Run Code Online (Sandbox Code Playgroud)
Hvplot 似乎并不关心我添加列的顺序(调用df.hvplot.barh(x = "group", y = ["lu", "le", "la"])不会改变任何内容。Hvplot 似乎也不关心数据框中的原始顺序。
是否有任何选项可以影响条形的顺序?