我正在尝试绘制一个简单的 gnuplot 条形图。每个栏顶部都有标签。
这是我的测试
279 2 10149
286 1 699999
295 3 14098
Run Code Online (Sandbox Code Playgroud)
这是我的命令:
echo "set terminal dumb size 70,30; plot 'test.out' using 3:xtic(1) with boxes" | gnuplot
它画了一个盒子。我还想在每个顶部贴上标签。
请帮忙 )
我不了解你们,但我喜欢一些 Gnuplot。如果使用得当,该软件会生成美丽的图像,其简单性和清晰度令人着迷,我非常喜欢。
没有什么特别的原因,有一天,我发现自己在想,如果我能创作出如此卡通魅力和充满活力的清晰度的图片来进入我的论文和个人科学日记该多好。因此,我首先进入了一个糟糕的项目,编写一个基于 gnuplot 的分子可视化工具。
到目前为止,它是为我的特定类型的分子量身定制的。基本上是共价键合的原子形成配体,配体本身通过配位键与一些中心金属离子相互作用。我已经成功地得出了一个非常好的工作概念,如下图所示。
其中,虚线表示与铕金属离子的配位键,颜色为浅青色,实线是原子之间的共价键。红色是氧,蓝色是氮,白色是氢,灰色是碳。到目前为止一切都很好,看起来相当可靠并且非常符合我想要的。
那么我该怎么做呢,我听到你问?嗯,实际上这很简单。我一次只策划一件事情。首先,我绘制虚线的连接模式,如下所示:
然后我画出共价键:
每个步骤都需要一个或多个单独的文件。每个配体的连接性存储在单独的“bondfile”中,并且点状连接性模式本身位于一个文件中。原子的位置及其颜色被放置在另一个文件中。一个用于每个配体,一个用于中心金属。
然后我有一个单独的文件,用于记录金属和每个配体的原子,我在其中说明它们的颜色。事实上,原子放置在黑点上,这使得点周围具有迷人的黑色布局,否则它们就没有轮廓线。
当您想要旋转复合体以获得更好的角度来保存到图片中时,就会出现问题。为了说明问题,我将用单个配体的图片来展示它的实际情况。我们以联吡啶为例(带有氮原子的,有两个)
所以这是我认为最佳角度的联吡啶:
现在假设我们沿着下图所示的轴转动联吡啶。
现在问题就显现出来了。因为一些应该位于平面后面的原子实际上位于整个物体的前面,这表明 gnuplot 实际上没有透视图。或者,至少,它确实有,但我使用不正确。
到目前为止,一切都很好。我没想到它会自动透视,因为这不是它最初设计的目的。然而,这意味着 gnuplot “splot” 会进行某种程度虚假的 3D 绘图,并且空间中点的实际相对位置并不重要。
所以我的问题是,对于所有 gnuplot/perspective 专家来说:有没有办法巧妙地规避这个限制?
我对任何方法都感兴趣,无论它有多复杂,只要它在 gnuplot 本身的限制内可行即可。
我有两个数据文件
# a.txt
1, 1, 1
2, 4, 1
3, 9, 5
4, 16, 1
5, 25, 1
6, 36, 1
7, 49, 1
8, 64, 1
9, 81, 1
10, 100, 1
Run Code Online (Sandbox Code Playgroud)
和
# b.txt
1, 1, 1
2, 3, 1
3, 10, 1
4, 17, 1
5, 24, 1
6, 34, 1
7, 48, 1
8, 62, 1
9, 85, 3
10, 98, 1
Run Code Online (Sandbox Code Playgroud)
我想在单个图像中绘制这两个数据,其误差线和右上角标签为“a”和“b”,最初我尝试使用
plot 'a.txt' u 1:2:3 w yerrorbars l, 'b.txt' u 1:2:3 w yerrorbars l …Run Code Online (Sandbox Code Playgroud) 您可以在大多数绘图程序中手动定位关键图例.例如,在gnuplot中完成使用set key top right.在GGPLOT2,它的完成这样的.
是否有绘图库,脚本或简单算法自动定位图例,使其与图中的数据重叠最小?
我的意思是:假设我画线y=x.在这种情况下,传奇的好地方是左上角或右下角.
我必须使用gnuplot在两个轴上绘制对数刻度的直方图.我需要垃圾桶在log10中等间距.在y轴上使用对数刻度不是问题.主要问题是在x轴上创建bin.例如,在log10中使用10个bin,第一个bin将是[1],[2],[3] .... [10 - 19] [20 - 29] ..... [100 190]等等.我在网上搜索过但我找不到任何实际的解决方案.如果在gnuplot中实现它太复杂了你能建议其他软件/语言来做吗?
有人问我会更具体地解释我需要做什么.我有这样一个(巨大的)列表:
1 14000000
2 7000000
3 6500000
.
.
.
.
6600 1
8900 1
15000 1
19000 1
Run Code Online (Sandbox Code Playgroud)
例如,它显示,14亿个IP地址已发送1个数据包,7个数百万个2个数据包.... 1个IP地址已发送6600个数据包,...,1个IP地址已发送19000个数据包.正如您所看到的,两个轴上的值都非常高,因此我无法在没有对数刻度的情况下绘制它.
我尝试的第一件事是因为我需要快速完成它,因为它是使用框在两个轴上使用gnuplot设置logscale来绘制这个列表.结果是可以理解的,但不太合适.事实上,盒子在x轴上变得越来越薄,因为很明显,10-100中的点数比1-10中的多!所以在第二个十年之后它变得非常混乱.
我在Gnuplot中创建重叠图,因为我混合了法线图和参数图(以及pm3d贴图和参数曲面).除了一件事之外,这种方法效果很好:如果两个图都有标题,则图例通常会重叠.典型示例如下所示:
#legends.gp
set term pngcairo enhanced color linewidth 1.5 dashed dashlength 1.4 rounded
set output "legends.png"
set title "legends test"
set multiplot
# make a box around the legend
set key box
set border 15 lw 1
# fix the margins, this is important to ensure alignment of the plots.
set lmargin at screen 0.15
set rmargin at screen 0.98
set tmargin at screen 0.90
set bmargin at screen 0.15
set xlabel "x"
set ylabel "sin(x)"
set xrange[0:2*pi]
set yrange[-1:1] …Run Code Online (Sandbox Code Playgroud) 有没有办法使图形的x/y tic-labels格式取决于tic的值?我正在设想一种格式声明
set format y ( ( ( <arg> > 1e-3 ) && ( <arg> < 1e2 ) ) ? "%2.1f" : "10^{%T}" )
Run Code Online (Sandbox Code Playgroud)
以便将对数比例图表示为
10 ^ { - 4},10 ^ { - 3},0.01,0.1,1,10,10 ^ {2}
等等,为1附近的数字提供更自然的表示.
我知道这可以通过明确声明格式来完成,即,
set xtics ( "10^{-3}" 1e-3, "0.01" 0.01, "0.1" 0.1, "1" 1, "10" 10, "10^{2)" 1e2 )
Run Code Online (Sandbox Code Playgroud)
但我想避免这么具体,因为每当图表的范围发生变化时,这组标签就会发生变化.我希望这个问题的答案是'不',但这里有希望.
请参阅此文章附上,但不是加密.
我有一些二进制数据.我想执行该文章中显示的gnuplots,但使用我的数据.
对于三维相空间图,序列a,b,c,d,e,f等可用作空间坐标(ab,bc,cd),(bc,cd,de),(cd创建的图中的模式揭示了后续序列之间的重复关系.在此阶段图中,50,000个16位随机数将产生非结构化的点云.
我想做同样的事情.我有一个二进制文件(大约10 MB),我想通过gnuplot运行它来创建漂亮的gnuplot图.
我怎么输入gnuplot来实现呢?
在谷歌搜索"阶段空间图"和gnuplot并没有太多回报.我不知道是不是因为这篇文章是德语的翻译.我不认为我在堆栈交换站点中找到了相关的答案.
我有一个sqlite数据库,其中包含以下格式的基本天气信息:
temp1 temp2 pressure humidity
22 23 1024 40
24 25 1027 45
25 26 1020 62
18 15 1019 80
Run Code Online (Sandbox Code Playgroud)
我该如何使用这些数据gnuplot?在绘制数据之前,我是否必须重新排列数据?
我有多个文件命名为以下示例:blast_ sample1 _454LargeContigs.fna.fas_vs_ NC_016593 _filter.txt
更改的部分是"sample#"(样本)和"NC_#"(参考),它们以粗体显示.每个参考文献有35个样本.我编写了以下命令,使用35个样本的数据生成参考NC_016593的绘图:
filename(n) = sprintf("blast_sample%d_454LargeContigs.fna.fas_vs_NC_016593_filter.txt", n)
plot for [i=01:35] filename(i) using 9:3:($10-$9):($3-$3) with vectors nohead
Run Code Online (Sandbox Code Playgroud)
对于每个参考我想做一个情节,因此为此我想用通配符写一个通用命令.有没有办法直接在gnuplot中做到这一点?是否可以使用通配符仅修改"NC_#"部分(如shell脚本中的*,类似于NC_*)?
谢谢.