使用 latex 绘制二维散点图

使用 latex 绘制二维散点图

我有一个二维整数数组。我想用这样的数据绘制散点图:

for(i=0, i<length(row), i++)
for(j=0, j<length(column), j++)
if data[i][j] is positive put a red mark else put a green mark.

有人能给出一个想法吗?谢谢。

答案1

Asymptote版本

// "2dscatter.asy"
// to get a standalone 2dscatter.pdf image, run
//    asy 2dscatter.asy
//
settings.outformat="pdf";
size(9cm);
srand(351767147);
int m=17, n=11;
real[][] data=new real[m][n];

// generate some random integer data table
for(int i=0; i<m; ++i) 
  for(int j=0; j<n; ++j) 
    data[i][j]=round((unitrand()*2-1)*m*n);

guide mark=scale(0.5)*unitcircle;

for(int i=0; i<m; ++i) for(int j=0; j<n; ++j){
  fill(shift(i,j)*mark,(data[i][j]>0)?red: green);
}

在此处输入图片描述

答案2

这是一个想法——但由于你没有提供任何数据,我只能用随机数填充数据数组。这是通过元帖子包裹在内luamplib,因此您应该用 来编译它lualatex

在此处输入图片描述

\documentclass[border=5mm]{standalone}
\usepackage{luamplib}
\begin{document}
\mplibtextextlabel{enable}
\begin{mplibcode}
numeric n, data[][];
n = 8;
for i=1 upto n:
    for j=1 upto n:
        data[i][j] = normaldeviate;
    endfor
endfor

beginfig(1);
    for i=1 upto n:
        for j=1 upto n:
            drawdot (i,j) scaled 6 
                withpen pencircle scaled 4 
                withcolor if data[i][j] > 0: red else: green fi;
        endfor
    endfor
endfig;
\end{mplibcode}
\end{document}

相关内容