首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >同轴范围不同的绘图范围

同轴范围不同的绘图范围
EN

Stack Overflow用户
提问于 2018-07-25 23:27:43
回答 4查看 3.3K关注 0票数 3

我有一个非常简单的、工作的gnuplot代码:

代码语言:javascript
复制
splot x * x

这从-10

我想从-10

换句话说,表面应该看起来像一个薄薄的带状在一个小部分的情节。剩下的应该是空的。下面是用我所拥有的图表创建我想要的东西的一个很差的努力。

我尝试过操纵yrange,但是这改变了表面边界和轴界。我也尝试过禁用autoscale,但我不知道下一步该做什么。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-07-26 05:35:46

这样做的一种方法是通过parametric模式,它为您提供一个单独的坐标集(uv)来设置范围。

代码语言:javascript
复制
f(x,y) = x*x

set xrange [-10:10]
set yrange [-10:10]
set urange [-10:10]
set vrange [-10:-9]
set parametric
splot u, v, f(u,v)

或者,您可以通过使用++特殊文件名而不是parametric模式来达到同样的效果:

代码语言:javascript
复制
f(x,y) = x*x

set xrange [-10:10]
set yrange [-10:10]
set urange [-10:10]
set vrange [-10:-9]

splot "++" u 1:2:(f($1,$2)) w l
票数 2
EN

Stack Overflow用户

发布于 2018-07-26 19:11:57

在当前的gnu图(5.2.4版)中,无论是否启用参数模式,都可以将采样范围与轴范围分开。参见在线演示集中的示例:sampling.html (见图9)

票数 3
EN

Stack Overflow用户

发布于 2018-07-27 16:20:25

使用一种编程语言,结合gnuplot,可以更好地控制绘图。

下面是一个使用c和脚本的示例。

plot.c

代码语言:javascript
复制
#include <stdio.h>
#include <math.h>

int main()
{
   int x, y;
   double z;

   for (y=-10; y <= 10; y++)
   {
      for (x=-10; x <= 10; x++)
      {
         z = x * 0.025;
         printf("%f %f %f\n", (double)x, (double)y, 100 - cos(z * M_PI*2) * 100);
      }
      printf("\n");
   }

   fflush(stdout);
   return 0;
}

plot.bat

代码语言:javascript
复制
gcc plot.c -o prog.exe -lm
prog > data.txt
echo splot "data.txt" using 1:2:3 with lines | gnuplot -p

plot.sh

代码语言:javascript
复制
gcc plot.c -o prog -lm
./prog > data.txt
echo 'splot "data.txt" using 1:2:3 with lines' | gnuplot -p

下面是一个使用python和脚本的示例。

它将输出:

plot.py

代码语言:javascript
复制
import math

print("\"Surface One\"")
for y in range(-10, 10+1):
   for x in range(-10, 10+1):
      z = x * 0.025
      print("%f %f %f 1" % (float(x), float(y), 100 - math.cos(z * math.pi*2) * 100))
   print("")
print("")

print("\"Surface Two\"")
for y in range(-10, -8+1):
   for x in range(-10, 10+1):
      z = x * 0.025
      print("%f %f %f 2" % (float(x), float(y), 100 - math.cos(z * math.pi*2) * 100))
   print("")
print("")

print("\"Surface Three\"")
for y in range(-10, 10+1):
   for x in range(-10, 10+1):
      z = x * 0.1
      print("%f %f %f 7" % (float(x)/2, float(y)/2, math.sin(z * math.pi*2) * 10))
   print("")
print("")

plot.bat

代码语言:javascript
复制
cd %~dp0
python plot.py > data.txt

echo ^
set terminal wxt size 570,420; ^
stats "data.txt" u 1:2 nooutput; ^
set border 0x7F linecolor rgb "#555555"; ^
set grid xtics linecolor rgb "#888888" linewidth 0.2 linetype 9; ^
set grid ytics linecolor rgb "#888888" linewidth 0.2 linetype 9; ^
set grid ztics linecolor rgb "#888888" linewidth 0.2 linetype 9; ^
set xrange [-10.0:10.0]; ^
set yrange [-10.0:10.0]; ^
set zrange [-10.0:100.0]; ^
splot for [IDX=0:STATS_blocks-1] "data.txt" i IDX using 1:2:3:4 with lines ^
lc variable title columnheader(1) | gnuplot -p

plot.sh

代码语言:javascript
复制
#!/bin/bash

python plot.py > data.txt

echo \
'set terminal wxt size 570,420; \
stats "data.txt" u 1:2 nooutput; \
set border 0x7F linecolor rgb "#555555"; \
set grid xtics linecolor rgb "#888888" linewidth 0.2 linetype 9; \
set grid ytics linecolor rgb "#888888" linewidth 0.2 linetype 9; \
set grid ztics linecolor rgb "#888888" linewidth 0.2 linetype 9; \
set xrange [-10.0:10.0]; \
set yrange [-10.0:10.0]; \
set zrange [-10.0:100.0]; \
splot for [IDX=0:STATS_blocks-1] "data.txt" i IDX using 1:2:3:4 with lines \
lc variable title columnheader(1)' | gnuplot -p
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51529014

复制
相关文章

相似问题

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