Google Charts 散点图适用于 Chrome Macbook,但不适用于 Chrome iPhone

Posted

技术标签:

【中文标题】Google Charts 散点图适用于 Chrome Macbook,但不适用于 Chrome iPhone【英文标题】:Google Charts scatter plots work on Chrome Macbook but not on Chrome iPhone 【发布时间】:2018-05-28 01:26:06 【问题描述】:

救命!

一直在网上搜索,试图弄清楚为什么下面的图表会通过 Chrome、Firefox 甚至 IE 在笔记本电脑或台式机上显示,但在 iPhone 8 Plus Chrome 上却不能显示?提前谢谢!

适用于 Macbook Chrome: Macbook ios Chrome screenshot

甚至 Macbook 的 Chrome 开发工具也使用移动视图: Macbook iOS Chrome Mobile Dev Tools screenshot

但在 iPhone 8 Plus 上查看时不在 Chrome 浏览器中? Individual data points on chart aren't shown mobile screenshot

代码在这里:

<!DOCTYPE html>
<html lang="en">
<head>
    <!-- Google Charts loader -->
    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js">
    </script>
    <!-- Google Charts creator and renderer -->
    <script type="text/javascript">
        google.charts.load('current', 'packages': ['scatter']);
        google.charts.setOnLoadCallback(drawCharts);

        function drawCharts() 
            drawChart0();
            drawChart1();
            drawChart2();
        ;

        function drawChart0 ()
        
            var data0 = new google.visualization.DataTable();
            data0.addColumn('date', 'Date');
            data0.addColumn('number', 'Price');
            data0.addRow([new Date('2018-03-01 06:57:31'),1450]);
            data0.addRow([new Date('2018-03-01 08:35:31'),1070]);
            data0.addRow([new Date('2018-03-01 09:27:50'),1454]);
            data0.addRow([new Date('2018-03-01 09:29:54'),1475]);
            data0.addRow([new Date('2018-03-01 10:48:23'),1099]);
            data0.addRow([new Date('2018-03-01 10:56:35'),1195]);
            data0.addRow([new Date('2018-03-01 11:01:04'),1375]);
            data0.addRow([new Date('2018-03-01 11:01:10'),1399]);
            data0.addRow([new Date('2018-03-01 11:02:15'),1175]);

            var options = 
                chart: 
                    title: 'Studio Rent Prices'
                ,
                hAxis: title: 'Date of Price',
                vAxis: title: 'Price ($)'
            ;
            var chart0 = new google.charts.Scatter(document.getElementById('scatterchart0'));
            chart0.draw(data0, google.charts.Scatter.convertOptions(options));
        ;


        function drawChart1 ()
        
            var data1 = new google.visualization.DataTable();
            data1.addColumn('date', 'Date');
            data1.addColumn('number', 'Price');
            data1.addRow([new Date('2018-02-27 13:08:49'),1550]);
            data1.addRow([new Date('2018-02-27 14:14:46'),1550]);
            data1.addRow([new Date('2018-03-01 11:02:11'),1875]);
            data1.addRow([new Date('2018-03-01 11:56:38'),1875]);
            data1.addRow([new Date('2018-03-01 12:54:21'),2310]);
            data1.addRow([new Date('2018-03-01 13:11:34'),1834]);
            data1.addRow([new Date('2018-03-01 14:10:52'),1709]);
            data1.addRow([new Date('2018-03-01 15:04:39'),1595]);
            data1.addRow([new Date('2018-03-01 15:05:36'),1715]);

            var options = 
                chart: 
                    title: 'One Bedroom Rent Prices'
                ,
                hAxis: title: 'Date of Price',
                vAxis: title: 'Price ($)'
            ;
            var chart1 = new google.charts.Scatter(document.getElementById('scatterchart1'));
            chart1.draw(data1, google.charts.Scatter.convertOptions(options));
        ;

        function drawChart2 ()
        
            var data2 = new google.visualization.DataTable();
            data2.addColumn('date', 'Date');
            data2.addColumn('number', 'Price');

            data2.addRow([new Date('2018-03-01 07:15:20'),1550]);
            data2.addRow([new Date('2018-03-01 09:37:37'),2164]);
            data2.addRow([new Date('2018-03-01 11:05:15'),1850]);
            data2.addRow([new Date('2018-03-01 11:15:27'),2150]);
            data2.addRow([new Date('2018-03-01 13:13:26'),2265]);
            data2.addRow([new Date('2018-04-02 15:46:59'),1495]);
            data2.addRow([new Date('2018-04-05 08:02:41'),1650]);
            data2.addRow([new Date('2018-04-05 09:45:10'),2919]);
            data2.addRow([new Date('2018-04-06 17:17:32'),1725]);
            data2.addRow([new Date('2018-04-09 09:58:12'),1550]);
            data2.addRow([new Date('2018-04-09 14:17:45'),1995]);
            data2.addRow([new Date('2018-04-12 10:57:25'),2395]);
            data2.addRow([new Date('2018-04-16 07:56:38'),1550]);
            data2.addRow([new Date('2018-04-19 09:37:20'),1850]);

            var options = 
                chart: 
                    title: 'Two Bedroom Rent Prices'
                ,
                hAxis: title: 'Date of Price',
                vAxis: title: 'Price ($)'
            ;
            var chart2 = new google.charts.Scatter(document.getElementById('scatterchart2'));
            chart2.draw(data2, google.charts.Scatter.convertOptions(options));
        ;
    </script>
    <link href='https://fonts.googleapis.com/css?family=Lato' rel='stylesheet'>
    <style>
        body 
            font-family: 'Lato';
            font-size: 22px;
            margin: 10px;
            margin-left: 40px;
        
    </style>
    <meta charset="UTF-8">
    <title>Rent Price Details</title>
</head>
<body>
    <h2>Rent Details</h2>
    <h3 id='ToC'>Table of Contents</h3>
    <ul>
        <li><a href='#Studio' target='_self'>Studio Prices</a></li>
        <li><a href='#1Bed' target='_self'>1 Bedroom Prices</a></li>
        <li><a href='#2Bed' target='_self'>2 Bedroom Prices</a></li>
    </ul>
    <h4 id='Studio'>Studio Prices</h4>
    <div id='scatterchart0' style="width: 800px; height: 500px;"></div><br />
    <h4 id='1Bed'>1 Bedroom Prices</h4>
    <div id='scatterchart1' style="width: 800px; height: 500px;"></div><br />
    <h4 id='2Bed'>2 Bedroom Prices</h4>
    <div id='scatterchart2' style="width: 800px; height: 500px;"></div><br />
    </p>
</body>

【问题讨论】:

【参考方案1】:

请参阅documentation ...特别是方法getChartLayoutInterface,以检查图表是否由于错误的测量而被渲染到可见视口之外,从而导致错误的定位。此外,移动浏览器可能会触发具有不同名称(如预期)的 DOM 事件,这需要映射到图表的事件...图表是否会触发 readyerror活动??

屏幕截图看起来并不完全像不支持 SVG。

【讨论】:

抱歉,我不清楚您的建议。我是否需要将每个图表设置为特定的视觉边界,以便通过您提到的功能在浏览器上显示? 如果图表是在画布的视觉边界内绘制的,您必须检查(尚未调整任何内容);使用 Chrome 调试桥,以便调试移动浏览器;它是chrome://inspect - 在连接数据线时...另一种可能性是事件,其中一个可能无法在浏览器上正确触发。使用调试桥都可以调试,然后修复。 也许你可以给我指出一篇文章,有人可以做到以上几点?如果图表没有在可视画布中绘制,我没有看到任何关于这个主题的可理解文档,或者如何在 JS 中更正它。谢谢! @ZacharyOliver 我已经给你指出了一个 URL,它通常“有所有的答案”......这里解释得更好:developers.google.com/web/tools/chrome-devtools/… 我想这应该适用于 Chrome iPhone 也一样。关键是需要特殊的硬件来重现“您的问题” - 因此,有人会尝试为您重现和修复它的可能性很低。对图表组件提交错误可能是另一种选择。

以上是关于Google Charts 散点图适用于 Chrome Macbook,但不适用于 Chrome iPhone的主要内容,如果未能解决你的问题,请参考以下文章

R语言可视化:散点图散点图和折线图(line charts)3D散点图旋转3D散点图气泡图corrgram包可视化相关性矩阵马赛克图( Mosaic plots)hexbin密度图

html D3byEX 6.1:散点图(适用于D3.js v4)

Google Charts:在相同的“X”值上绘制多个“Y”值

R语言使用plot函数和lines函数可视化并排的散点图和折线图(line charts)如果把从左到右移动的散点图中的点连接起来,你就有了一个线图

如何在Scatter Google Charts中显示两种不同的颜色?

散点图scatter简介