Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 定义条形图的固定宽度/高度,然后设置条形图的绝对宽度和条形图之间的绝对间距(以像素为单位)_R_Ggplot2_Bar Chart - Fatal编程技术网

R 定义条形图的固定宽度/高度,然后设置条形图的绝对宽度和条形图之间的绝对间距(以像素为单位)

R 定义条形图的固定宽度/高度,然后设置条形图的绝对宽度和条形图之间的绝对间距(以像素为单位),r,ggplot2,bar-chart,R,Ggplot2,Bar Chart,我想使用符合严格标准的ggplot2生成条形图: 它们必须具有特定尺寸(宽度和高度) 无论绘图中恰好有多少条,条的宽度必须固定(以像素为单位) 无论条数多少,条之间的间距必须以像素为单位固定 我使用的是RStudio,它允许查看器响应。这意味着当我扩展查看器的边界时,绘图会相应地拉伸,从而增加条的宽度和它们之间的间距。相反,缩小观察者的边界将使条形图变薄,并减少它们之间的空间 类似地,在给定的查看器边界中,绘制条形图时,6个条形图的条形宽度与只有2个条形图时的条形宽度不同 示范 库(ggpl

我想使用符合严格标准的
ggplot2
生成条形图:

  • 它们必须具有特定尺寸(宽度和高度)
  • 无论绘图中恰好有多少条,条的宽度必须固定(以像素为单位)
  • 无论条数多少,条之间的间距必须以像素为单位固定
我使用的是RStudio,它允许查看器响应。这意味着当我扩展查看器的边界时,绘图会相应地拉伸,从而增加条的宽度和它们之间的间距。相反,缩小观察者的边界将使条形图变薄,并减少它们之间的空间

类似地,在给定的查看器边界中,绘制条形图时,6个条形图的条形宽度与只有2个条形图时的条形宽度不同

示范
库(ggplot2)
图书馆(dplyr)
p_所有_条%
ggplot(aes(x=类别))+
geom_bar()
p_两个_条%
过滤器(类别==“紧凑型”|类别==“suv”)%>%
ggplot(aes(x=类别))+
geom_bar()
p_所有_条

p_两个_条


如果我保存尺寸为
width=1000像素
height=650像素
两个图,很明显,两个条之间的条宽度和间距在一个图(7条)和另一个图(2条)之间是不同的


底线
如何设置绘图高度和宽度的绝对值(以像素为单位),以及条形宽度和条形间距的绝对值(以像素为单位),而不考虑绘图中的条形数?

对于大多数使用情况,ggplot2能够很好地缩放以适应不同大小的视口是其最大的优势之一。但是,在这样的情况下,如果您实际上希望在主绘图面板中使用固定大小的对象,则会使生活更加困难。原因是面板大小本身不是固定的。相反,它会根据设备大小增减,从而允许绘图的某些其他元素(如轴元素、文本和标题)保持固定大小

这是可能的,但并不容易。为此,您需要:

  • 以像素为单位固定整个绘图的大小
  • 将打印面板的大小固定为总打印宽度的比例
  • 根据x轴上的项目数自动计算条形宽度
  • 如果你觉得这听起来太麻烦了,那么我可能会同意。如果你想制作许多情节,这是值得的。对于这里或那里的奇数,我可能会沿x轴添加虚拟因子水平,以保持绘图一致,然后使用成像软件在轴上切出额外的空间

    但是,这是可能的,因此值得一提的是,这里有一个示例,使用编程方法将条形图固定在51像素宽,6像素间距:

    库(ggplot2)
    图书馆(dplyr)
    p_所有_条%
    ggplot(aes(x=类别))+
    geom_bar()+
    比例x离散(扩展=扩展(0,1/7))
    p_两个_条%
    过滤器(类别==“紧凑型”|类别==“suv”)%>%
    ggplot(aes(x=类别))+
    geom_bar()+
    比例x离散(扩展=扩展(倍数=0,1/2))
    
    两块吧,谢谢。首先,我很高兴有办法解决这个问题。其次,我非常愿意投入精力,因为我正在为大规模生产可视化构建基础设施,而这些基础设施必须在外观上统一。第三,在您的解决方案中,虽然
    twobars.png
    实际上是500x500,但打印区域(即背景、网格和轴)大约是
    allbars.png
    的0.28,其余是空白。有没有办法让所有背景与
    allbar.png
    保持一致,只需将
    compact
    suv
    条放在中间?@Emman在这种情况下,为什么不只添加带有空白标签且没有记号的空条呢?这将是一个创造性的解决方案。但是,我不确定如何以编程方式实现这一点(可能在函数中?)。我的意思是,我如何实现自动化?在一个场景中,我可能会显示3个条形图,在其他情况下,我可能会显示5个条形图,等等。@Emman当然,我可以将其放在一个函数中。你只需要知道你需要容纳的最大酒吧数量?谢谢,@Allan!1到6之间的任意数量的钢筋。