Google Chart:如何更改负值的颜色

2023-12-02

我目前有一个使用 GoogleCharts 的漂亮的 AreaChart,但是我试图在值为负时更改图表的颜色和背景颜色。

根据我的发现,想法是仅显示一个区域用于正值,而另一个区域用于显示负值,以便我可以自定义颜色。然而你可以在下面看到我并没有真正成功地做到这一点。

任何想法? 谢谢, 蒂姆

google.charts.load('current', {
  packages: ['corechart', 'line']
});
google.charts.setOnLoadCallback(drawLineColors);

function drawLineColors() {
  var data = new google.visualization.DataTable();
  data.addColumn('number', 'X');
  data.addColumn('number', 'Blue Team');
  data.addColumn('number', 'Red Team');

  data.addRows([
    [0, 0, 0],
    [3, 1700, 1600],
    [6, 1800, 1700],
    [9, 2500, 2423],
    [12, 3000, 2500],
    [15, 4700, 5800],
    [18, 5200, 5900],
    [21, 5500, 6000],
    [24, 6000, 6200],
    [27, 6800, 6700],
    [30, 7500, 7000],
    [33, 7800, 8200],
    [36, 7900, 9756],
    [39, 8000, 10752],
    [42, 9000, 13753],
    [45, 15000, 17845]
  ]);

  var options = {

    legend: {
      position: 'top'
    },
    enableInteractivity: false,
    width: 712,
    height: 156,
    backgroundColor: {
      fill: 'transparent'
    },
    curveType: 'function',
    hAxis: {
      title: 'Time'
    },
    vAxis: {
      title: 'Team Gold'
    },
    colors: ['#FF0000', '#0000FF']
  };

  var dataView = new google.visualization.DataView(data);
  dataView.setColumns([0, {
    calc: function(data, row) {
      return data.getValue(row, 2) - data.getValue(row, 1);
    },
    type: 'number',
    label: 'Blue'
  }]);


  dataView.setColumns([1, {
    calc: function(data, row) {
      return data.getValue(row, 1) - data.getValue(row, 2);
    },
    type: 'number',
    label: 'Red'
  }]);

  var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
  chart.draw(dataView, options);
}
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<div id="chart_div"></div>

配置选项为colors将颜色映射到每个系列

在这种情况下,只有一个系列(或列)——方差

相反,使用style列角色定义每行的颜色

另外:使用setColumns多次,覆盖之前的任何调用setColumns

同时提供所有列

列数组可以包含...
一个整数,作为数据表列索引的引用
或自定义函数的对象

请参阅以下工作片段...

google.charts.load('current', {
  callback: drawLineColors,
  packages: ['corechart']
});

function drawLineColors() {
  var data = new google.visualization.DataTable();
  data.addColumn('number', 'X');
  data.addColumn('number', 'Blue Team');
  data.addColumn('number', 'Red Team');

  data.addRows([
    [0, 0, 0],
    [3, 1700, 1600],
    [6, 1800, 1700],
    [9, 2500, 2423],
    [12, 3000, 2500],
    [15, 4700, 5800],
    [18, 5200, 5900],
    [21, 5500, 6000],
    [24, 6000, 6200],
    [27, 6800, 6700],
    [30, 7500, 7000],
    [33, 7800, 8200],
    [36, 7900, 9756],
    [39, 8000, 10752],
    [42, 9000, 13753],
    [45, 15000, 17845]
  ]);

  var options = {
    legend: {
      position: 'top'
    },
    enableInteractivity: false,
    width: 712,
    height: 156,
    backgroundColor: {
      fill: 'transparent'
    },
    curveType: 'function',
    hAxis: {
      title: 'Time'
    },
    vAxis: {
      title: 'Team Gold'
    }
  };

  var dataView = new google.visualization.DataView(data);
  dataView.setColumns([
    // reference first column by index
    0,
    // variance
    {
      calc: function(data, row) {
        return data.getValue(row, 2) - data.getValue(row, 1);
      },
      type: 'number',
      label: 'Y'
    },
    // variance color
    {
      calc: function(data, row) {
        var val = data.getValue(row, 2) - data.getValue(row, 1);
        if (val >= 0) {
          return '#0000FF';
        }
        return '#FF0000';
      },
      type: 'string',
      role: 'style'
    }
  ]);

  var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
  chart.draw(dataView, options);
}
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div id="chart_div"></div>

EDIT

或者如果你want每个团队单独排队...

google.charts.load('current', {
  callback: drawLineColors,
  packages: ['corechart']
});

function drawLineColors() {
  var data = new google.visualization.DataTable();
  data.addColumn('number', 'X');
  data.addColumn('number', 'Blue Team');
  data.addColumn('number', 'Red Team');

  data.addRows([
    [0, 0, 0],
    [3, 1700, 1600],
    [6, 1800, 1700],
    [9, 2500, 2423],
    [12, 3000, 2500],
    [15, 4700, 5800],
    [18, 5200, 5900],
    [21, 5500, 6000],
    [24, 6000, 6200],
    [27, 6800, 6700],
    [30, 7500, 7000],
    [33, 7800, 8200],
    [36, 7900, 9756],
    [39, 8000, 10752],
    [42, 9000, 13753],
    [45, 15000, 17845]
  ]);

  var options = {
    legend: {
      position: 'top'
    },
    enableInteractivity: false,
    width: 712,
    height: 156,
    backgroundColor: {
      fill: 'transparent'
    },
    curveType: 'function',
    hAxis: {
      title: 'Time'
    },
    vAxis: {
      title: 'Team Gold'
    },
    colors: ['#0000FF', '#FF0000']
  };

  var dataView = new google.visualization.DataView(data);
  dataView.setColumns([
    // reference first column by index
    0,
    // team Y is better
    {
      calc: function(data, row) {
        var val = data.getValue(row, 2) - data.getValue(row, 1);
        if (val > 0) {
          return val;
        }
        return null;
      },
      type: 'number',
      label: 'Blue'
    },
    // team X is better
    {
      calc: function(data, row) {
        var val = data.getValue(row, 1) - data.getValue(row, 2);
        if (val > 0) {
          return val;
        }
        return null;
      },
      type: 'number',
      label: 'Red'
    },
  ]);

  var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
  chart.draw(dataView, options);
}
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div id="chart_div"></div>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Google Chart:如何更改负值的颜色 的相关文章

随机推荐

  • WebRTC 卡在连接状态

    我已经成功地从 A 向 B 传达了 WebRTC 连接的报价 答案和冰候选 此时 连接卡在 connecting 状态 启动器 A 似乎超时或过了一段时间后切换到了 failed 状态 而其遥控器 B 处于 connecting 永久状态
  • 如何从空手道中的响应标头中提取双引号中的值

    我想要响应标头 etag 中的特定值 响应头 etag W 118 pbdwwFo9SKNhD3Lx5iHJyngpq00 空手道代码 def etag responseHeaders etag 0 print Value of Etag
  • 多模块项目中的 maven-release-plugin 每个模块都有一个单独的 git 存储库

    我想知道是否可以在每个模块都有自己的 git 存储库的多模块项目中使用 maven release plugin 像这样的事情 parent git pom xml module1 git pom xml 我设置了一个简单的测试 在 Lin
  • 如何在ANTLR4中生成AST?

    我正在开发一个项目 在该项目中我必须为给定程序生成抽象语法树 这里的程序可以是任何主流编程语言 在 ANTLR4 中生成 AST 的标准方法应该是什么 我只了解 ANTLR4 的基础知识 并且能够为给定程序生成解析树 ANTLR 4 自动生
  • 如何自定义 JAXB 对象列表到 JSON 的序列化?

    我正在使用 Jersey 为服务器组件创建 REST Web 服务 我想要在列表中序列化的 JAXB 注释对象如下所示 XmlRootElement name distribution XmlType name tDistribution
  • Sqlcmd:错误:Microsoft SQL Server Native Client 10.0:通信链接失败

    下面 您会注意到我尝试从 Microsoft SQL Server 2008 的 64 位 Program Files 文件夹中调用一些 Windows 命令提示符命令 C Program Files Microsoft SQL Serve
  • 如何访问 Next.js 中 getServerSideProps 中的路由参数?

    我想使用 slug 中的 ID 查询我的 Supabase 表 例如localhost 3000 book 1然后在 Next js 的页面上显示有关该书的信息 Table 书 id js import useRouter from nex
  • 子进程的刷新输出

    我通过创建了一个子进程IPC Open2 我需要逐行读取该子进程的标准输出 问题是 由于子进程的标准输出未连接到终端 因此它已完全缓冲 并且在进程终止之前我无法从中读取数据 如何在不修改子进程代码的情况下刷新子进程的输出 子进程代码 whi
  • 生产中模型内的 Rails 3 翻译

    我正在尝试将一个应用程序翻译成日语 一切都很顺利 直到我将其投入生产 由于 cache classes 现在为 true 模型中的任何翻译都会恢复为默认语言环境 我知道我可能应该直接在 yml 文件中定位翻译 但我不确定如何针对以下简化代码
  • 按词频计数对结果进行排序

    如果有 2 个文档中分别出现 5 次和 2 次 world 一词 所以我希望首先列出包含 5 次 world 一词的文档 然后列出包含 2 次 world 一词的文档 我该如何排序 Thanks 我认为没有必要对其进行排序 如果您有您提到的
  • ?,./' aria-label='匹配符号的正则表达式:!$%^&*()_+|~-=`{}[]:";'<>?,./'> 匹配符号的正则表达式:!$%^&*()_+|~-=`{}[]:";'<>?,./

    我正在尝试在 JavaScript 中创建一个正则表达式测试 该测试将测试一个字符串是否包含以下任何字符 lt gt 如果您有兴趣 请了解更多信息 这是我正在开发的一个非常酷的密码更改应用程序 如果您有兴趣 这里是其余的代码 我有一个列出密
  • 如何在 JSF 中控制 http 标头?

    PF 3 5 4 0 Omnifaces 1 6 3 Mojara 2 1 21 是否可以控制将在 JSF xhtml 页面内部发送的 http 标头 我的意思是 xhtml
  • setContextProperty() 不会在 qml 文件中创建类实例

    The main py文件显示一个选项卡小部件 在每个选项卡上 我加载了一个特定的 qml 文件 但为了解决这个问题 我将只考虑一个 qml 文件和一个选项卡 import sys os math import numpy as np fr
  • 通过 Javascript 检测新的 Microsoft Edge v80 (Blink) 的正确方法是什么?

    由于最新版本的 Microsoft Edge 是out并使用 Blink 使用 javascript 区分旧边缘和新边缘的正确方法是什么 目前我计划研究一下navigator userAgent检查旧版本的 Edge 最多 18 个 con
  • requestInterstitialAdPresentation 只能运行一次

    我想知道为什么 self requestInterstitialAdPresentation 只能工作一次 我的意思是 我将此调用绑定到 UIButton 中 第一次运行我的应用程序 然后单击此按钮 广告会正确显示 但是 当我关闭广告并尝试
  • 如何确保运行代码时控制台不会立即关闭?

    我正在尝试学习 C 编程 但是当我运行代码时 cmd 窗口立即关闭 而没有给我更改以查看程序是否打印了我想要的结果 我正在 VS Code 上使用多个扩展对 C 进行编码 是否有设置 扩展 代码片段 或者我可以做些什么 使它不会立即关闭 T
  • C++ - 传递对 std::shared_ptr 或 boost::shared_ptr 的引用

    如果我有一个需要与shared ptr 将其传递给它的引用不是更有效吗 这样可以避免复制shared ptr目的 可能有哪些不良副作用 我设想两种可能的情况 1 在函数内部 由参数组成一个副本 如 ClassA take copy of s
  • 获取p标签的行高[重复]

    这个问题在这里已经有答案了 我想计算出一个的行高 p div 内的标签 var myp document getElementById myp var heightLabel document getElementById heightLa
  • 在 TextMate 问题中用反向引用替换

    我正在使用 TextMate 来替换表达式 my expression 由开括号和闭括号之间的字符组成 my expression 所以我尝试更换 by 1 正则表达式匹配正确的表达式 但替换给出 1 因此该变量不被识别 有人可以有想法吗
  • Google Chart:如何更改负值的颜色

    我目前有一个使用 GoogleCharts 的漂亮的 AreaChart 但是我试图在值为负时更改图表的颜色和背景颜色 根据我的发现 想法是仅显示一个区域用于正值 而另一个区域用于显示负值 以便我可以自定义颜色 然而你可以在下面看到我并没有