如何在opengl用代码绘制英文_如何用R绘制带有工字型(误差线)的柱状图

今天,小编想跟大家分享一下如何用我们自己的数据绘制带有误差线的柱状图。首先,放一张图吧!

3bf1650c7484e5f6062380236d206e43.png

这是小编自己编造的一组数据绘制而成的,主要想介绍给小伙伴们方法。

准备:第一次需要安装ggplot2和相关包,我们打开Rstudio,在交互界面输入install.packages("ggplot2"),选择相应的国内镜像站点。安装好后,以后使用就不需要再安装了。

接下来,我们键入代码library(ggplot2),这一步的操作是加载ggplot2这个包(也可以理解为调用), 因为小编想要演示用自己的excel数据来绘图,所以这里我们还要加载一个读取excel的包,在交互界面输入library(readxl)

接着我们就导入数据,小编准备了一个excel的数据,放在了桌面,内容如下

e14fcd0a2dffe9931d50d9446c35e88e.png

现在我们就通过代码导入R中,sample <- read_excel("C:UsersAdministratorDesktop示例.xlsx") ,其中sample是小编创建的变量,后面是一个导入函数,括号里是文件路径。

接下来我们就开始准备数据了,在交互界面输入以下代码sample_long = with(sample,

rbind( data.frame( lesion=group, stimulus= "test1", lat=test1, sem=sd ),

data.frame( lesion=group, stimulus= "test2", lat=test2, sem=sd) )

)

sample_long$lesion=factor(sample_long$lesion, levels=unique(sample_long$lesion))

这里小编再次命名了一个变量sample_long,并为其赋值。这里的with可以理解为sample_long的取值是在变量sample中, rbind可以理解为将两组取值连接起来赋予sample_long。在括号中又引入了四个变量,分别是lesion、stimulus、lat、sem,除了stimulus取值为字符串,其余都是excel表格中的相应的列,代表取那一列的值。sample_long$lesion可以理解为这个变量名代表着sample_long中的lesion,后面的factor可以简单理解为限制取值范围,level也是类似作用,限定取值水平。

数据准备好后,我们开始绘图。代码如下

figure <- ggplot(data = sample_long, aes(x=lesion, y=lat, fill=stimulus) ) +

geom_errorbar(aes(ymin=lat, ymax=lat+sem, width = 0.2),position=position_dodge(width=0.90)) +

geom_bar(stat="identity", position="dodge") +

geom_bar(stat="identity", position="dodge", colour="black") +

scale_fill_manual(values=c("grey80", "blue")) +

xlab("实验分组") +

scale_y_continuous("数据测量值", expand=c(0,0), limits = c(0, 5.5)) +

theme_bw() +

labs(title="示例:带误差柱状图")+

theme(

panel.grid.major = element_blank(),

panel.grid.minor = element_blank(),

panel.border = element_blank(),

axis.line=element_line(colour="black"),

axis.text.y=element_text(angle=90, hjust=0.5),

legend.position = "left",

plot.title = element_text(hjust=0.5),

legend.key = element_rect()

)

print(figure)

这里简单说说每一行代码的含义,figure是一个变量,看过前几期文章的小伙伴们应该都知道了。

ggplot(data = sample_long, aes(x=lesion, y=lat, fill=stimulus) )是对ggplot绘图函数相关参数设置,data是指使用变量sample_long中的数据,aes(x=lesion, y=lat, fill=stimulus)中aes全称是aesthetics,怎么来理解呢?小编认为可以简单理解为布局,通过对元素的设置来达到让图形更好看,其中x和y指x轴和y轴,fill可以理解为字面意思“填充”,主要体现在图例的标识上。

+号可以理解为一个连接符。geom_errorbar(aes(ymin=lat, ymax=lat+sem, width = 0.2),position=position_dodge(width=0.90))这行代码是对误差线的设置,ymin指y轴上最小值,ymax指y轴上最大值。Width指横向宽度,position就是指位置了。geom_bar(stat="identity", position="dodge") +

geom_bar(stat="identity", position="dodge", colour="black")这里两行代码合在一起讲,指图中的条形图参数。stat="identity"可以简单理解为图形具有同一性,position="dodge"可以理解为图形不重叠

88f101b8601c10f7f51f588ef60fc533.png

scale_fill_manual(values=c("grey80", "blue"))这是对两种图颜色填充,我们可以按需求更改。xlab("实验分组")是x轴的标题,scale_y_continuous("数据测量值", expand=c(0,0), limits = c(0, 5.5))是y轴题目和刻度设置。theme_bw()是一类主题风格,labs(title="示例:带误差柱状图")是最上面的标题。theme(

panel.grid.major = element_blank(),

panel.grid.minor = element_blank(),

panel.border = element_blank(),

axis.line=element_line(colour="black"),

axis.text.y=element_text(angle=90, hjust=0.5),

legend.position = "left",

plot.title = element_text(hjust=0.5),

legend.key = element_rect()

)是相关参数的设置,panel.grid.major = element_blank(),

panel.grid.minor = element_blank()是网格线,我们去掉两行代码绘制的图如下

2e20a01ee115ee23a0b7da6d91df883f.png

panel.border = element_blank()是指边框。axis.line=element_line(colour="black")指轴线颜色。legend.position = "left"图例位置,plot.title = element_text(hjust=0.5)标题居中。legend.key = element_rect()是什么意思呢?哈哈,小编不说。小伙伴们感兴趣自行研究,提个醒,和图例相关。

好了,今天分享就到这里.

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是用OpenGL绘制Bezier曲线代码示例,你可以参考一下: ```c++ #include <GL/glut.h> // 三次Bezier曲线的控制点 GLfloat ctrlpoints[4][3] = { {-4.0, -4.0, 0.0}, {-2.0, 4.0, 0.0}, {2.0, -4.0, 0.0}, {4.0, 4.0, 0.0} }; void init(void) { glClearColor(0.0, 0.0, 0.0, 0.0); glShadeModel(GL_FLAT); glEnable(GL_MAP1_VERTEX_3); } void display(void) { GLint i; glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0, 1.0, 1.0); glBegin(GL_LINE_STRIP); for (i = 0; i <= 30; i++) glEvalCoord1f((GLfloat)i / 30.0); glEnd(); /* 绘制控制点 */ glPointSize(5.0); glColor3f(1.0, 1.0, 0.0); glBegin(GL_POINTS); for (i = 0; i < 4; i++) glVertex3fv(&ctrlpoints[i][0]); glEnd(); glFlush(); } void reshape(int w, int h) { glViewport(0, 0, (GLsizei)w, (GLsizei)h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if (w <= h) glOrtho(-5.0, 5.0, -5.0*(GLfloat)h / (GLfloat)w, 5.0*(GLfloat)h / (GLfloat)w, -5.0, 5.0); else glOrtho(-5.0*(GLfloat)w / (GLfloat)h, 5.0*(GLfloat)w / (GLfloat)h, -5.0, 5.0, -5.0, 5.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutInitWindowSize(500, 500); glutInitWindowPosition(100, 100); glutCreateWindow(argv[0]); init(); glutDisplayFunc(display); glutReshapeFunc(reshape); glutMainLoop(); return 0; } ``` 该示例使用了OpenGL的Map1,glEvalCoord1f函数来绘制Bezier曲线,glOrtho函数用来设置视口。你可以在代码中修改控制点的坐标以及窗口大小来观察Bezier曲线绘制效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值