【问题标题】:How to set Google Chart height based on number of rows?如何根据行数设置谷歌图表高度?
【发布时间】:2016-12-12 17:17:46
【问题描述】:

我有一个谷歌堆积条形图,它从数据库中提取数据并根据所述数据绘制图表。我能够四处搜索并找到一种根据行数动态设置高度的方法 - 但对于我的一个搜索过滤器,图表看起来很遥远。

代码如下,适用于我的 5 个过滤器中的 4 个,但在第 5 个过滤器中,行数变得更大(大约 40-50)。

代码:

            var paddingHeight = 40;
            var rowHeight = data.getNumberOfRows() * 50;
            var chartHeight = rowHeight + paddingHeight;

            var options = {
                titlePosition: 'none',
                width: 1400,
                height: chartHeight,
                legend: { position: 'top', maxLines: 3 },
                bar: { groupWidth: '50%' },
                isStacked: true,
                hAxis: {
                    title: 'Business Hours (excluding weekends & holidays)'
                },
                colors: ['#0066ff', '#33cc33', '#ffcc00', '#ff0000'],
                annotations: {
                    alwaysOutside: true,
                    textStyle: {
                        color: '#000000'
                    }
                }
            }

产生以下结果。这第一张图片是我的 5 个过滤器中的 4 个的样子。

第二张图片显示我明显做错了什么。

这是什么原因,我该如何解决?

编辑:我怀疑我的问题是以下之一: 当我使用最新的搜索参数刷新页面时,我的数据行没有被正确计算,或者我的 div 的设置和相互交互的方式有问题。我尝试调整 chartHeight 背后的数学并删除填充,无论哪种方式似乎都具有相同的效果。我是在正确的轨道上还是我还缺少其他东西?

【问题讨论】:

    标签: javascript charts asp.net-core google-visualization


    【解决方案1】:

    需要为heightchartArea.height设置选项

    这里,推荐使用rowHeight换成chartArea.height

            var paddingHeight = 40;
            var rowHeight = data.getNumberOfRows() * 50;
            var chartHeight = rowHeight + paddingHeight;
    
            var options = {
                titlePosition: 'none',
                width: 1400,
    
                height: chartHeight,
                chartArea: {
                  height: rowHeight,
                },
    
                legend: { position: 'top', maxLines: 3 },
                bar: { groupWidth: '50%' },
                isStacked: true,
                hAxis: {
                    title: 'Business Hours (excluding weekends & holidays)'
                },
                colors: ['#0066ff', '#33cc33', '#ffcc00', '#ff0000'],
                annotations: {
                    alwaysOutside: true,
                    textStyle: {
                        color: '#000000'
                    }
                }
            }
    

    您需要为图例、y 轴等留出一些空间...

    chartArea 具有以下属性

    top
    left
    height
    width

    如果图例在顶部,您需要将 top 设置为 20 或其他内容

    【讨论】:

    • 希望对您有所帮助,here is a working example 演示...
    • 您好,非常感谢您的快速回复!好像我很接近但不知道 chartArea 选项所以谢谢你!看起来我可以用bottom 做类似的事情来让我的号码也显示出来,这很好。我还注意到在我的屏幕截图中,第二个图表如何将图例错开到第二行 - 有没有办法解决这个问题,使其始终是 1 行而不是分成 2 行?
    • 如果可能,您能否简要解释一下我的图表在设置高度而不是 chartArea 高度时发生了什么?我问是因为如果我没有足够大的数据集来发现这个问题,我会以错误的方式处理这个问题,并且可能会遇到麻烦。
    • 虽然 height 被设置,chartArea.height 使用了一些默认数字——例如-- 如果整体height100 并且您想将20 分别留给底部的图例和y 轴,那么您将设置--> height: 100, chartArea.height: 60, chartArea.top: 20 -- 默认情况下将20 留在底部 -- 注意:bottom 没有属性 -- 对于图例行,只需要足够宽或尝试使用legend.maxLines: 1 的选项
    • cool -- bottom 没有在配置选项中列出 -- 但它与version 43 以及right 一起添加...
    猜你喜欢
    • 2016-05-06
    • 2017-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-24
    • 2016-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多