如何用plot绘制线密度

时间:2019-11-11 14:44:24

标签: python plotly

比方说,我有一组是随机过程的结果(y与x)。

我正在寻找一种可视化的方式来显示线条的分布。

我正在寻找一个具体的例子透明度渐变填充区域,其中不透明度对应于该点的直方图高度。

有点像plotly "Filled Lines" example,只是我不是在填充区域寻找硬边界,而是使用透明性逐步淘汰。

this blog中显示了一个与我要实现的目标类似的示例: enter image description here

我想在同一图上以不同的颜色绘制不同的线组(例如,不同的实验条件),以便直观地比较其结果。

2 个答案:

答案 0 :(得分:1)

您可以使用的一种方法是matplotlib的LineCollection。您可以使用cmap并为集合中的每一行明确指定alpha透明度。

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.collections import LineCollection


N = 100
x = np.arange(N)
# Here are many sets of y to plot vs x
ys = [x**2+ x + i for i in x]

# We need to set the plot limits, they will not autoscale
fig, ax = plt.subplots()
ax.set_xlim(0,20)
ax.set_ylim(0,200)

verts = [np.column_stack([x, y]) for y in ys]

a_first = np.linspace(0,1,50)
alpha_array =np.concatenate((np.flip(a_first),a_first))

line_segments = LineCollection(verts,linewidth=2, cmap="Blues_r", array=alpha_array)
ax.add_collection(line_segments)
fig.colorbar(line_segments)
plt.show()

enter image description here

答案 1 :(得分:1)

由于您特别要求[plotly],因此一种方法可能是用随机的线条和一定的不透明性直观地表示随机过程中的所有结果。

情节1:

enter image description here

代码:

# imports
from plotly.subplots import make_subplots
import plotly.graph_objs as go
import pandas as pd
import numpy as np

# random data
np.random.seed(123)
frame_rows = 50
frame_cols = 500
frame_columns = ['V_'+str(e) for e in list(range(frame_cols+1))]
df=pd.DataFrame()

for col in frame_columns:
    df[col]=np.sin(np.arange(0,frame_rows/10, 0.1)*np.random.uniform(low=0.85, high=0.99))

# plotly figure
fig=go.Figure()
for i in range(1, frame_cols):
        #print(str(i))
        fig.add_trace(go.Scatter(x=df.index, y=df[df.columns[i]].values,
                                 name = df.columns[i],
                                 mode = 'lines',
                                 line_color='black',
                                 opacity = 0.008
                                )
                     )
fig.show()