![tikz 中的气泡图,其大小取决于固定组定义的值和颜色](https://linux22.com/image/445494/tikz%20%E4%B8%AD%E7%9A%84%E6%B0%94%E6%B3%A1%E5%9B%BE%EF%BC%8C%E5%85%B6%E5%A4%A7%E5%B0%8F%E5%8F%96%E5%86%B3%E4%BA%8E%E5%9B%BA%E5%AE%9A%E7%BB%84%E5%AE%9A%E4%B9%89%E7%9A%84%E5%80%BC%E5%92%8C%E9%A2%9C%E8%89%B2.png)
我想生成具有以下属性的气泡图。
- 具有相同 x 坐标的气泡具有相同的颜色。
- 气泡的大小取决于数据中指定的值。
- 所有气泡的区域均位于图表内部。
编辑
气泡还应具有以下附加属性:
- 我可以手动调整每个 x 坐标的颜色。例如,1、5、8 为蓝色;2、3、9 为红色;4、6、7 为灰色。MWE 的 x 坐标数量减少,可以用作最小工作示例。
- 气泡的大小取决于数据中指定的值。该数据应以数字形式出现在气泡内。
目前,我有这个最小的工作示例。
\documentclass[tikz,border=3mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.17}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
xtick=data,
symbolic x coords = {A,B,C,D},
symbolic y coords = {1,2,3,4,5},
ytick distance=1,ymax=5,
scale only axis,
xticklabel style={anchor=north,align=center},
xticklabels={A,B and C,D,E and F},
]
\addplot[%
scatter=true,
only marks,
point meta=explicit,
fill opacity=0.5,text opacity=1,
visualization depends on = {2*\thisrow{Val} \as \perpointmarksize},
scatter/@pre marker code/.append style={
/tikz/mark size=\perpointmarksize,
% /tikz/mark options={fill=blue!80!black}
},
nodes near coords*,
nodes near coords style={text=white,font=\sffamily,anchor=center},
] table [x={Group},y={Posttest},meta index=2] {
Group Posttest Val
A 1 2
A 2 8
B 2 15
B 4 10
C 2 10
C 5 3
C 3 12
D 1 4
D 3 11
};
\end{axis}
\end{tikzpicture}
\end{document}
此示例生成以下气泡图:
在实际示例中,颜色取决于大小,即列的值瓦尔在数据表中,但没有相应的 x 坐标的值。
蓝色气泡的面积3橙色气泡的面积11在图外。
我尝试用 改变颜色,% /tikz/mark options={fill=blue!80!black}
但没有效果。 的改变meta index = 2
产生了其他气泡,这些气泡没有所需的大小和颜色。
我会非常乐意提供帮助:-)
答案1
完整代码如下:
\documentclass[tikz,border=3mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.17}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
xtick=data,
enlargelimits=.1,
symbolic x coords = {A,B,C,D},
symbolic y coords = {1,2,3,4,5},
ytick distance=1,ymax=5,
scale only axis,
xticklabel style={anchor=north,align=center},
xticklabels={A,B and C,D,E and F},
]
\addplot[%
scatter=true,
only marks,
point meta=\thisrow{color},
fill opacity=0.5,text opacity=1,
visualization depends on = {2*\thisrow{Val} \as \perpointmarksize},
visualization depends on = {\thisrow{Val} \as \Val},
scatter/@pre marker code/.append style={
/tikz/mark size=\perpointmarksize
% /tikz/mark options={fill=blue!80!black}
},
nodes near coords*={$\pgfmathprintnumber\Val$},
nodes near coords style={text=white,font=\sffamily,anchor=center},
] table [x={Group},y={Posttest}] {
Group Posttest Val color
A 1 2 .1
A 2 8 .1
B 2 15 .3
B 4 10 .3
C 2 10 .1
C 5 3 .1
C 3 12 .1
D 1 4 .3
D 3 11 .3
};
\end{axis}
\end{tikzpicture}
\end{document}
- 使用
enlargelimits
(或enlarge x limits
和enlarge y limits
)来控制轴与数据图的关系, visualization depends on = {\thisrow{Val} \as \Val}
与 结合使用nodes near coords*={$\pgfmathprintnumber\Val$}
来控制气泡内的文字,- 与颜色列结合使用
point meta=\thisrow{color}
,明确选择和匹配颜色。
我希望这有帮助。