术语“热图”通常是指笛卡尔图,其数据可视化为彩色矩形图块。
Plotly 支持两种不同类型的彩色瓦片热图:
- 矩阵热图接受二维矩阵或数据数组并将其直接可视化。这种类型的热图是本页的主题。
- 密度热图接受数据作为列表,并可视化聚合数量,如数据的计数或总和。请参阅2D Histogram 文档。
Plotly Express是 Plotly 的易于使用的高级界面,它对各种类型的数据进行 *** 作并生成易于样式化的图形。使用px.imshow
,输入数组或数据帧的每个值都表示为热图像素。
px.imshow()
功能用于显示热图(以及全彩图像)。它接受类似数组的对象,如list和numpy
或xarray
数组的列表,以及pandas.DataFrame
对象。
话不多说,上代码:
import plotly.express as px
fig = px.imshow([[1, 20, 30],
[20, 1, 60],
[30, 60, 1]])
fig.show()
import plotly.express as px
df = px.data.medals_wide(indexed=True)
fig = px.imshow(df)
fig.show()
在热图上显示文本
(v5.5 中的新功能)
可以使用参数将值作为文本添加到图中text_auto
。将其设置为True,
将在条形图上显示值,并将其设置为d3-format
格式化字符串将控制输出格式。
import plotly.express as px
z = [[.1, .3, .5, .7, .9],
[1, .8, .6, .4, .2],
[.2, 0, .5, .7, .9],
[.9, .8, .4, .2, 0],
[.3, .4, .5, .7, 1]]
fig = px.imshow(z, text_auto=True)
fig.show()
控制纵横比
默认情况下,px.imshow()
生成带有方形图块的热图,但将aspect
参数设置为"auto"
将使用非方形图块用热图填充绘图区域。
import plotly.express as px
z = [[.1, .3, .5, .7, .9],
[1, .8, .6, .4, .2],
[.2, 0, .5, .7, .9],
[.9, .8, .4, .2, 0],
[.3, .4, .5, .7, 1]]
fig = px.imshow(z, text_auto=True, aspect="auto")
fig.show()
自定义热图上的轴和标签
可以使用x
,y
和labels
参数自定义热图的显示,并使用.update_xaxes()
将 x 轴刻度标签移动到顶部:
import plotly.express as px
data=[[1, 25, 30, 50, 1], [20, 1, 60, 80, 30], [30, 60, 1, 5, 20]]
fig = px.imshow(data,
labels=dict(x="Day of Week", y="Time of Day", color="Productivity"),
x=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'],
y=['Morning', 'Afternoon', 'Evening']
)
fig.update_xaxes(side="top")
fig.show()
基本热图plotly.graph_objects
如果Plotlygo.Heatmapplotly.graph_objects Express 没有提供一个好的起点,也可以使用.
带有分类轴标签的热图在此示例中,还可以通过将hoverongaps设置为 False来展示如何在数据中有缺失值时忽略hovertext。
import plotly.graph_objects as go
fig = go.Figure(data=go.Heatmap(
z=[[1, None, 30, 50, 1], [20, 1, 60, 80, 30], [30, 60, 1, -10, 20]],
x=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'],
y=['Morning', 'Afternoon', 'Evening'],
hoverongaps = False))
fig.show()
块大小不等的热图
import plotly.graph_objects as go
import numpy as np
# Build the rectangles as a heatmap
# specify the edges of the heatmap squares
phi = (1 + np.sqrt(5) )/2. # golden ratio
xe = [0, 1, 1+(1/(phi**4)), 1+(1/(phi**3)), phi]
ye = [0, 1/(phi**3), 1/phi**3+1/phi**4, 1/(phi**2), 1]
z = [ [13,3,3,5],
[13,2,1,5],
[13,10,11,12],
[13,8,8,8]
]
fig = go.Figure(data=go.Heatmap(
x = np.sort(xe),
y = np.sort(ye),
z = z,
type = 'heatmap',
colorscale = 'Viridis'))
# Add spiral line plot
def spiral(th):
a = 1.120529
b = 0.306349
r = a*np.exp(-b*th)
return (r*np.cos(th), r*np.sin(th))
theta = np.linspace(-np.pi/13,4*np.pi,1000); # angle
(x,y) = spiral(theta)
fig.add_trace(go.Scatter(x= -x+x[0], y= y-y[0],
line =dict(color='white',width=3)))
axis_template = dict(range = [0,1.6], autorange = False,
showgrid = False, zeroline = False,
linecolor = 'black', showticklabels = False,
ticks = '' )
fig.update_layout(margin = dict(t=200,r=200,b=200,l=200),
xaxis = axis_template,
yaxis = axis_template,
showlegend = False,
width = 700, height = 700,
autosize = False )
fig.show()
带有日期时间轴的热图
import plotly.graph_objects as go
import datetime
import numpy as np
np.random.seed(1)
programmers = ['Alex','Nicole','Sara','Etienne','Chelsea','Jody','Marianne']
base = datetime.datetime.today()
dates = base - np.arange(180) * datetime.timedelta(days=1)
z = np.random.poisson(size=(len(programmers), len(dates)))
fig = go.Figure(data=go.Heatmap(
z=z,
x=dates,
y=programmers,
colorscale='Viridis'))
fig.update_layout(
title='GitHub commits per day',
xaxis_nticks=36)
fig.show()
热图点上的文本
可以使用texttemplate向热图点添加文本。将文本属性中的值用于文本。还可使用textfont调整字体大小。
import plotly.graph_objects as go
fig = go.Figure(data=go.Heatmap(
z=[[1, 20, 30],
[20, 1, 60],
[30, 60, 1]],
text=[['one', 'twenty', 'thirty'],
['twenty', 'one', 'sixty'],
['thirty', 'sixty', 'one']],
texttemplate="%{text}",
textfont={"size":20}))
fig.show()
更多内容Heatmaps in Pythonhttps://plotly.com/python/heatmaps/
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)