计算化学公社

标题: 下面这种二维分布图的做法 [打印本页]

作者
Author:
I10140317    时间: 2017-11-17 23:02
标题: 下面这种二维分布图的做法
大家好,最近在处理数据的时候在想做下图左边这种图,横坐标和纵坐标每个小线段代表了一个整数数值,颜色根据数值大小涂色。右图是根据gnuplot的pm3d功能做的图。但两图的区别是,我用gnuplot做的图其实横坐标是各个点,不是一个线段。所以想问下大家有没有谁知道origin和gnuplot是否可以实现左图的效果,如果不行的话,什么软件可行? (, 下载次数 Times of downloads: 52)


作者
Author:
meatball1982    时间: 2017-11-18 09:18
本帖最后由 meatball1982 于 2017-11-18 09:56 编辑

在matlab当中,默认的和你的效果是一样的。
我的思路是将x,y作一个小平移,每个都 -0.5.在新的x,y,z边上加一行和列,形成一个新的x,y,z.
以相同的方式画图。
如果可行,gnuplot 应该也可以实现。

主函数
  1. clear all
  2. clc

  3. [x,y,z]=peaks(10);
  4. z(1:2,:)=[];
  5. [x,y,z_new]=fun_mm_shift(z);
  6. subplot(1,2,1)
  7. surf(z)
  8. axis equal
  9. axis tight
  10. view(0,90)
  11. colorbar
  12. title('your fig')

  13. subplot(1,2,2)
  14. surf(x,y,z_new)
  15. colormap(hot)
  16. axis equal
  17. axis tight
  18. view(0,90)
  19. colorbar
  20. title('ref fig')
复制代码



平移的函数。要存成fun_mm_shift.m放在主函数的目录下,或是放在你matlab知道的路径里。
  1. function [ X,Y,z_new ] = fun_mm_shift( z )
  2. % [ X,Y,z_new ] = fun_mm_shift( z )
  3. % shfit the x,y to x-0.5, y-0.5
  4. % add one row and one column
  5. % for surf,

  6. [m,n]=size(z);
  7. [X,Y]=meshgrid([1:(n+1)]-0.5,[1:(m+1)]-0.5);
  8. tm=z;
  9. tm=[z;z(end,:)];
  10. z_new=[tm';tm(:,end)']';

  11. end
复制代码


作者
Author:
I10140317    时间: 2017-11-18 10:17
meatball1982 发表于 2017-11-18 09:18
在matlab当中,默认的和你的效果是一样的。
我的思路是将x,y作一个小平移,每个都 -0.5.在新的x,y,z边上加 ...

嗯嗯,非常感谢!
我先按你的思路用gnuplot试试,不行的话转战matlab,得学习一下。
作者
Author:
小范范1989    时间: 2017-11-18 16:11
http://bbs.keinsci.com/forum.php ... tid=2968&extra=
类似这个不?
origin作图
作者
Author:
I10140317    时间: 2017-11-21 09:25
小范范1989 发表于 2017-11-18 16:11
http://bbs.keinsci.com/forum.php?mod=viewthread&tid=2968&extra=
类似这个不?
origin作图

嗯嗯,没错,是这样的,谢谢!!
作者
Author:
I10140317    时间: 2017-11-21 10:58
本帖最后由 I10140317 于 2017-11-21 11:22 编辑

经过各位的帮助,结合网上的一些教程,最终成功的用gnuplot成功作图,附代码如下:
  1. unset title
  2. unset key
  3. set size ratio 0.75
  4. set palette defined (0 'white', 1 'green')

  5. set xyplane at 0.0
  6. set cbrange [0:1.0]

  7. set xrange[-0.5:5.5]
  8. set yrange[-0.5:5.5]
  9. set xtics  0,1,5            font "Arial,10"
  10. set ytics  0,1,5            font "Arial,10"

  11. set mxtics 2
  12. set mytics 2

  13. set tics scale 0,1.0
  14. set grid front mxtics mytics lw 1.5 lt -1 lc rgb 'white'
  15. set term pngcairo color font "Arial,10"
  16. set output "file.png"
  17. set origin 0.0,0.0
  18. plot "file.dat" matrix with image
复制代码

文件格式如下:
0.22 0.13 0.54 0.83 0.08 0.53
0.98 0.57 0.52 0.24 0.66 0.74
0.23 0.68 0.24 0.89 0.76 0.15
0.89 0.78 0.69 0.78 0.10 0.88
0.24 0.77 0.27 0.28 0.69 0.44
0.46 0.22 0.65 0.73 0.32 0.28


效果如下:
(, 下载次数 Times of downloads: 61)







作者
Author:
赵云跳槽    时间: 2017-11-22 18:54
I10140317 发表于 2017-11-21 10:58
经过各位的帮助,结合网上的一些教程,最终成功的用gnuplot成功作图,附代码如下:
文件格式如下:
0.22  ...

你这种图使用Excle就能做啊,使用数据填色,再把色阶图粘过来 (, 下载次数 Times of downloads: 42)





欢迎光临 计算化学公社 (http://bbs.keinsci.com/) Powered by Discuz! X3.3