首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >graphics gnuplot出错

graphics gnuplot出错
EN

Stack Overflow用户
提问于 2016-04-30 18:22:19
回答 1查看 65关注 0票数 1

我正在编写一个带有轴(y "%“和x "date")的图形,当少于7条记录显示不好时

这些是文件

data.csv:

代码语言:javascript
复制
20-04-2016 96.8  95.8 100
21-04-2016 97.07 97.99 100
22-04-2016 98.05 99.5 100
23-04-2016 98.64 97.88 100
24-04-2016 98.96 98.99 100
25-04-2016 98.68 98.11 100

图表

代码语言:javascript
复制
reset

set terminal png size 1200,500

#set xlabel "Time (days)"
set xdata time
set timefmt "%d-%m-%Y"


set ylabel "Total Petitions (%)"
set yrange [95:100]

set title "Akamai"
set key reverse Left outside
set grid

set style data linespoints

plot "datos.csv" using 1:2 title "One (%)", \
"" using 1:3 title "Two (%)", \
"" using 1:4 title "Ideal (%)"

他给我看了这个

如图所示,日期是重复的,并且我希望每条记录显示一个日期。

我也喜欢把日期

代码语言:javascript
复制
%d-%m\n%Y

如果我放入7个或更多的记录,这个问题就解决了

如果我把完整的日期和轴x的描述

它可以垂直显示日期吗?

非常感谢您的帮助

EN

回答 1

Stack Overflow用户

发布于 2016-04-30 18:37:01

使用set format x

代码语言:javascript
复制
set terminal pngcairo enhanced color dashed \
rounded size 1200,500

set title "Akamai"
set xlabel "date"
set xdata time
set timefmt "%d-%m-%Y"
set format x "%d/%m\n%Y"
set xtics 86400
set nomxtics
set ylabel "Total Petitions (%)"
set yrange [95:100]
set style data linespoints
set grid
set key right bottom
set output 'user1847844.png'

plot "datos.csv" using 1:2 title "One (%)", \
"" using 1:3 title "Two (%)", \
"" using 1:4 title "Ideal (%)"

在内部,gnuplot将日期时间转换为秒。所以行set xtics 86400基本上是说每天做一次滴答,因为一天有24*60*60 = 86400秒。set nomxtics告诉gnuplot不要在x轴上显示小刻度线。

这提供了:

如果要旋转标签,请使用:

代码语言:javascript
复制
set format x "%d/%m/%Y"
set xtics rotate 86400

这应该将日期格式化为单行,并将标签旋转90度。

更新:

请注意,我使用的是pngcairo终端。这是基于cairo graphics library的。这是为了在所有输出介质上提供一致的输出。但是gnuplot必须在cairo的支持下编译才能工作。

一般来说,我更喜欢pdfcairo终端。这会产生PDF输出,可以缩放而不会产生像素化效果。

更新2:

为了使我的图形保持一致,我在我的gnuplotrc中定义了某些样式,我在图形中使用这些样式。我的gnuplotrc的内容如下所示。

代码语言:javascript
复制
set encoding utf8

# See https://github.com/Gnuplotting/gnuplot-palettes
# Line styles (colorbrewer Set1)
set style line 1 lc rgb '#E41A1C' pt 1 ps 1 lt 1 lw 2 # red
set style line 2 lc rgb '#377EB8' pt 6 ps 1 lt 1 lw 2 # blue
set style line 3 lc rgb '#4DAF4A' pt 2 ps 1 lt 1 lw 2 # green
set style line 4 lc rgb '#984EA3' pt 3 ps 1 lt 1 lw 2 # purple
set style line 5 lc rgb '#FF7F00' pt 4 ps 1 lt 1 lw 2 # orange
set style line 6 lc rgb '#FFFF33' pt 5 ps 1 lt 1 lw 2 # yellow
set style line 7 lc rgb '#A65628' pt 7 ps 1 lt 1 lw 2 # brown
set style line 8 lc rgb '#F781BF' pt 8 ps 1 lt 1 lw 2 # pink
# Palette
set palette maxcolors 8
set palette defined ( 0 '#E41A1C', 1 '#377EB8', 2 '#4DAF4A', 3 '#984EA3',\
4 '#FF7F00', 5 '#FFFF33', 6 '#A65628', 7 '#F781BF' )

# Standard border
set style line 11 lc rgb '#808080' lt 1 lw 3
set border 0 back ls 11
set tics out nomirror

# Standard grid
set style line 12 lc rgb '#808080' lt 0 lw 1
set grid back ls 12
unset grid

我使用pdfcairo终端作为标准配置,如下所示。

代码语言:javascript
复制
set terminal pdfcairo enhanced color dashed font "Alegreya, 14" \
rounded size 16 cm, 9.6 cm

所使用的字体是一个示例。对于报告中的图形,我倾向于使用与正文文本相同的字体。

plot命令使用定义的样式。

代码语言:javascript
复制
plot "user1847844.d" using 1:2 ls 1 title "One (%)", \
"" using 1:3 ls 2 title "Two (%)", \
"" using 1:4 ls 3 title "Ideal (%)"

这会产生一个如下所示的图形。

注意:由于StackOverflow不接受PDF图像,所以我使用ImageMagick将其转换为PNG。

代码语言:javascript
复制
convert -density 300 <input.pdf> -quality 100 -sharpen 0x1.0 <output.png>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36953679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档