我想绘制一个表示全球水平辐照度(GHI)的时间序列,但为了节省图表中的一些空间,我想跳过(编辑:剪下(不跳过)夜间(因为 GHI = 0)。经过手册和在线的多次研究,我还是没能找到办法。
有人可以指点一下吗?
数据文件(18kb): https://mycore.core-cloud.net/index.php/s/C6shyrGVB6P3sFY
梅威瑟:
\documentclass{minimal}
\usepackage{tikz,pgfplots}
\usepgfplotslibrary{dateplot}
\begin{document}
\begin{center}
\begin{tikzpicture}
\pgfplotsset{
width=0.9\linewidth,
height=6cm,
enlarge x limits=false,
date coordinates in=x,
},
\pgfplotstableread[col sep=comma]{mwe_data.txt}\csvdata
\begin{axis}[
xtick = {
2019-11-28 12:00:00,
2019-11-29 12:00:00,
2019-11-30 12:00:00,
2019-12-01 12:00:00,
2019-12-02 12:00:00,
2019-12-03 12:00:00,
2019-12-04 12:00:00,
2019-12-05 12:00:00,
2019-12-06 12:00:00
},
xticklabels = {{11/28}, {11/29}, {11/30}, {12/01}, {12/02}, {12/03}, {12/04}, {12/05}, {12/06}},
]
\addplot[blue] table [x=date, y=ytest, col sep=comma] {\csvdata};
\end{axis}
\end{tikzpicture}
I would like to skip the nights (``flat parts'' between each bell-shaped curve). How to do it?
\end{center}
\end{document}
答案1
您可以做类似下面的事情...
希望代码是不言自明的。如果不是,请告诉我,我会添加更多评论。
% used PGFPlots v1.17
\begin{filecontents*}{2019-11-28.txt}
date,ytest
2019-11-28 07:00:00,8.02755958414918
2019-11-28 07:10:00,10.0714341969697
2019-11-28 07:20:00,18.182062993007
2019-11-28 07:30:00,31.9215635967366
2019-11-28 07:40:00,59.9968768484848
2019-11-28 07:50:00,43.8790581818182
2019-11-28 08:00:00,56.7919637365967
2019-11-28 08:10:00,85.6069067482517
2019-11-28 08:20:00,60.8201431724942
2019-11-28 08:30:00,67.0991551515152
2019-11-28 08:40:00,108.272003799534
2019-11-28 08:50:00,147.261625827506
2019-11-28 09:00:00,127.970548484848
2019-11-28 09:10:00,249.143053986014
2019-11-28 09:20:00,266.097825617716
2019-11-28 09:30:00,175.566653263403
2019-11-28 09:40:00,259.082215151515
2019-11-28 09:50:00,220.087723729604
2019-11-28 10:00:00,184.913791095571
2019-11-28 10:10:00,186.307211678322
2019-11-28 10:20:00,174.174548484848
2019-11-28 10:30:00,161.654907226107
2019-11-28 10:40:00,239.255915198135
2019-11-28 10:50:00,269.134998484848
2019-11-28 11:00:00,330.599837599068
2019-11-28 11:10:00,306.391391072261
2019-11-28 11:20:00,196.466128065268
2019-11-28 11:30:00,250.895419242424
2019-11-28 11:40:00,341.598022424242
2019-11-28 11:50:00,510.74779037296
2019-11-28 12:00:00,459.975986363636
2019-11-28 12:10:00,317.949429510489
2019-11-28 12:20:00,155.827984382284
2019-11-28 12:30:00,218.156163356643
2019-11-28 12:40:00,470.363884848485
2019-11-28 12:50:00,350.313718391608
2019-11-28 13:00:00,297.899851794872
2019-11-28 13:10:00,345.954895454545
2019-11-28 13:20:00,249.559491841492
2019-11-28 13:30:00,272.595835780886
2019-11-28 13:40:00,281.575694592075
2019-11-28 13:50:00,242.207596969697
2019-11-28 14:00:00,257.686765407925
2019-11-28 14:10:00,229.097061258741
2019-11-28 14:20:00,175.762047645688
2019-11-28 14:30:00,201.927451515152
2019-11-28 14:40:00,199.678609067599
2019-11-28 14:50:00,162.180008146853
2019-11-28 15:00:00,168.439736666667
2019-11-28 15:10:00,129.322764848485
2019-11-28 15:20:00,73.4925704032634
2019-11-28 15:30:00,33.4562387459207
2019-11-28 15:40:00,27.2548221212121
2019-11-28 15:50:00,30.1002351305361
2019-11-28 16:00:00,13.8014952785548
2019-11-28 16:10:00,5.99298729393939
\end{filecontents*}
\begin{filecontents*}{2019-11-29.txt}
date,ytest
2019-11-29 07:00:00,8.22343353613053
2019-11-29 07:10:00,9.10495462121212
2019-11-29 07:20:00,14.7334812820513
2019-11-29 07:30:00,27.4326361934732
2019-11-29 07:40:00,43.083562004662
2019-11-29 07:50:00,43.2562539393939
2019-11-29 08:00:00,42.5858389324009
2019-11-29 08:10:00,48.3482946270396
2019-11-29 08:20:00,55.3327293939394
2019-11-29 08:30:00,65.294122974359
2019-11-29 08:40:00,102.524040792541
2019-11-29 08:50:00,127.1736704662
2019-11-29 09:00:00,239.150707575758
2019-11-29 09:10:00,361.603814452215
2019-11-29 09:20:00,328.831635617716
2019-11-29 09:30:00,345.97325006993
2019-11-29 09:40:00,357.99968030303
2019-11-29 09:50:00,372.845608088578
2019-11-29 10:00:00,390.571766829837
2019-11-29 10:10:00,405.603939393939
2019-11-29 10:20:00,418.199873776224
2019-11-29 10:30:00,431.443011818182
2019-11-29 10:40:00,438.386245081585
2019-11-29 10:50:00,441.688725757576
2019-11-29 11:00:00,448.251020839161
2019-11-29 11:10:00,454.550526317016
2019-11-29 11:20:00,456.137909114219
2019-11-29 11:30:00,458.420281818182
2019-11-29 11:40:00,460.692877575758
2019-11-29 11:50:00,459.33933993007
2019-11-29 12:00:00,456.890065151515
2019-11-29 12:10:00,451.382753566434
2019-11-29 12:20:00,444.060885034965
2019-11-29 12:30:00,436.250066200466
2019-11-29 12:40:00,426.142813636364
2019-11-29 12:50:00,416.812155477856
2019-11-29 13:00:00,405.859154428904
2019-11-29 13:10:00,389.548715151515
2019-11-29 13:20:00,372.751736270396
2019-11-29 13:30:00,354.381773030303
2019-11-29 13:40:00,337.545432797203
2019-11-29 13:50:00,319.499625757576
2019-11-29 14:00:00,299.772427599068
2019-11-29 14:10:00,275.693884545455
2019-11-29 14:20:00,251.035318811189
2019-11-29 14:30:00,224.904456060606
2019-11-29 14:40:00,201.454696783217
2019-11-29 14:50:00,176.488658578089
2019-11-29 15:00:00,153.540760606061
2019-11-29 15:10:00,128.508215850816
2019-11-29 15:20:00,104.884847855478
2019-11-29 15:30:00,81.2881136829837
2019-11-29 15:40:00,57.403333939394
2019-11-29 15:50:00,37.3887196969697
2019-11-29 16:00:00,18.6037069207459
2019-11-29 16:10:00,5.55498918181818
\end{filecontents*}
\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{
dateplot,
groupplots,
}
\begin{document}
\begin{tikzpicture}
\begin{groupplot}[
group style={
group size=9 by 1,
horizontal sep=1mm,
y descriptions at=edge left,
},
width=0.1\linewidth,
height=4cm,
scale only axis,
ymin=0,
ymax=500,
enlarge x limits=false,
date coordinates in=x,
date ZERO=2019-11-28,
xticklabel style={
align=center,
rotate=90,
anchor=near xticklabel,
},
no markers,
table/x=date,
table/y=ytest,
table/col sep=comma,
%
xtick=\empty, % <-- delete me when all plots finished
]
\nextgroupplot[
xmin=2019-11-28 07:00,
xmax=2019-11-28 16:00,
xtick={%
2019-11-28 07:00,
2019-11-28 16:00%
},
% adapt to your needs
xticklabels={%
{\\2019-11-28 07:00},
{2019-11-28 16:00\\}%
},
]
\addplot table {2019-11-28.txt};
\nextgroupplot[
xmin=2019-11-29 07:00,
xmax=2019-11-29 16:00,
xtick={%
2019-11-29 07:00,
2019-11-29 16:00%
},
xticklabels={%
{\\2019-11-29 07:00},
{2019-11-29 16:00\\}%
},
]
\addplot table {2019-11-29.txt};
%
% I think you know how to continue with the rest of the plots ...
\nextgroupplot
\addplot [red] table {2019-11-28.txt};
\nextgroupplot
\addplot [red] table {2019-11-29.txt};
\nextgroupplot
\addplot [red] table {2019-11-28.txt};
\nextgroupplot
\addplot [red] table {2019-11-29.txt};
\nextgroupplot
\addplot [red] table {2019-11-28.txt};
\nextgroupplot
\addplot [red] table {2019-11-29.txt};
\nextgroupplot
\addplot [red] table {2019-11-28.txt};
\end{groupplot}
\end{tikzpicture}
\end{document}
答案2
也许这种方法适合您。PGFplot 可以按轴(x
或y
)过滤值。此外,PGFplot 还可以使用参数在图表中对有inf
或nan
进行拆分。您可以选择“夜间”unbounded coords=jump
的最小值,然后使用过滤器将其更改为(当然,如果已知 x,也可以指定间隔)。y
nan
\documentclass{minimal}
\usepackage{tikz,pgfplots}
\usepgfplotslibrary{dateplot}
\begin{document}
\begin{center}
\begin{tikzpicture}
\pgfplotsset{
width=0.9\linewidth,
height=6cm,
enlarge x limits=false,
date coordinates in=x,
},
\pgfplotstableread[col sep=comma]{mwe_data.txt}\csvdata
\begin{axis}[
unbounded coords=jump,
filter point/.code={%
\pgfmathparse{\pgfkeysvalueof{/data point/y}<7}%
\ifpgfmathfloatcomparison\pgfkeyssetvalue{/data point/x}{nan}%
\fi
},
xtick = {
2019-11-28 12:00:00,
2019-11-29 12:00:00,
2019-11-30 12:00:00,
2019-12-01 12:00:00,
2019-12-02 12:00:00,
2019-12-03 12:00:00,
2019-12-04 12:00:00,
2019-12-05 12:00:00,
2019-12-06 12:00:00
},
xticklabels = {{11/28}, {11/29}, {11/30}, {12/01}, {12/02}, {12/03}, {12/04}, {12/05}, {12/06}},
]
\addplot[blue] table [x=date, y=ytest, col sep=comma] {\csvdata};
\end{axis}
\end{tikzpicture}
I would like to skip the nights (``flat parts'' between each bell-shaped curve). How to do it?
\end{center}
\end{document}
结果将会是这样的一幅图画。