当前位置: 首页 > 知识库问答 >
问题:

Google Charts:如何在可视化中替换数据表元素,而不是在原始表中替换数据表元素(DataView方法不起作用)?

凌鹏程
2023-03-14

我正在尝试执行一个相当基本的程序。我有一个很长的数据表,其中有很大的单元格大小,可以与Google Visualization一起使用。在创建页面之前,我想用代码和缩写替换大的单元格,以减少文件大小和加载时间。我能搞定。然而,当单元格或列值/名称/标签显示在可视化本身中时,我希望看到该值的长格式版本(例如原始数据集中的“male”-Google可视化数据表中的“m”->category filter下拉列表、工具提示中的“male”,等等),而这出乎意料地出现了问题。

我试图在下面修改的Google Playground示例中复制这个问题(以及我试图修复它的失败尝试)。在本例中,我将初始数据集更改为在Gender列中有“m”和“f”,我仍然希望可视化在下拉列表和显示的表中显示“male”和“fomen”,就像它在原始可视化中所做的那样。

我的修正尝试被标记为修正性别的尝试;基本上,我试图创建原始表的DataView,并用一个计算列替换Gender列,将'm和'f转换为'male's和'fale's...但我不确定这是否是一个明智的方法,即使我能使它工作(但我做不到)。这样做的目的是避免用一个长值替换原始表中的每一个短值;我只想替换在可视化中显示的表值。但我在这里或其他地方都找不到其他的方法,而且我对这个东西有点陌生,所以我不认为我能在没有一些指导的情况下想出一个方法。至少,如果过去几个小时的故障是任何迹象的话。

如有任何意见或建议,将不胜感激。这里是原始代码示例。

function drawVisualization() {
  // Prepare the data
  var data = new google.visualization.DataTable();
  data.addColumn('string', 'Name');
  data.addColumn('string', 'Gender');
  data.addColumn('number', 'Age');
  data.addColumn('number', 'Donuts Eaten');
  data.addRows([
    ['Michael' , 'M', 12, 5],
    ['Elisa', 'F', 20, 7],
    ['Robert', 'M', 7, 3],
    ['John', 'M', 54, 2],
     ['Jessica', 'F', 22, 6],
     ['Aaron', 'M', 3, 1],
     ['Margareth', 'F', 42, 8],
     ['Miranda', 'F', 33, 6]
  ]);

  *******//ATTEMPT TO FIX GENDER

  /*var sexfix = function (data, row) {
      var val = data.getValue(row, 1);
      switch (val) {
        case 'M':
          val = 'Male';
          break;
        case 'F':
          val = 'Female';
          break;
        default:
          alert('error');
          return 'Error!';
            }
      }

  var dview = new google.visualization.DataView(data);

  dview.setColumns([0,{calc: sexfix, type:'string'}, 2, 3]);

  ********/

  // Define a slider control for the Age column.
  var slider = new google.visualization.ControlWrapper({
    'controlType': 'NumberRangeFilter',
    'containerId': 'control1',
    'options': {
      'filterColumnLabel': 'Age',
    'ui': {'labelStacking': 'vertical'}
    }
  });

  // Define a category picker control for the Gender column
  var categoryPicker = new google.visualization.ControlWrapper({
    'controlType': 'CategoryFilter',
    'containerId': 'control2',
    'options': {
      'filterColumnLabel': 'Gender',
      'ui': {
      'labelStacking': 'vertical',
        'allowTyping': false,
        'allowMultiple': false
      }
    }
  });

  // Define a Pie chart
  var pie = new google.visualization.ChartWrapper({
    'chartType': 'PieChart',
    'containerId': 'chart1',
    'options': {
      'width': 300,
      'height': 300,
      'legend': 'none',
      'title': 'Donuts eaten per person',
      'chartArea': {'left': 15, 'top': 15, 'right': 0, 'bottom': 0},
      'pieSliceText': 'label'
    },
    // Instruct the piechart to use colums 0 (Name) and 3 (Donuts Eaten)
    // from the 'data' DataTable.
    'view': {'columns': [0, 3]}
  });

  // Define a table
  var table = new google.visualization.ChartWrapper({
    'chartType': 'Table',
    'containerId': 'chart2',
    'options': {
      'width': '300px'
    }
  });

  // Create a dashboard
  new google.visualization.Dashboard(document.getElementById('dashboard')).
      // Establish bindings, declaring the both the slider and the category
      // picker will drive both charts.
      bind([slider, categoryPicker], [pie, table]).
      // Draw the entire dashboard.
      draw(data);
}
​

编辑:下面的解决方案。总而言之:

1)在dview.setcolumns下,包含一个标签名称作为选项(例如:“标签:'gender'”)以便控件和图表可以按标签引用计算的列;

2)绘制视图,而不是表格(最后一行应该是:“draw(dview)”);

3)将我的sexfix代码中的变量重命名从常规格式“var='x'”更改为“return:{v:'x'f:'xxxxx'}”;以及

4)添加“AddFormattedValue:true”行,或者使用ControlWrappers和ChartWrappers中的“View:”选项来显示格式化值。

共有1个答案

傅阳
2023-03-14

我怀疑您的代码有两个问题。第一种情况是,在将“gender”列添加到DataView时,没有使用列标签,这是必要的,因为性别筛选器设置了FilterColumnLabel选项,而不是FilterColumnIndex。添加要修复得标签:

{calc: sexfix, type:'string', label: 'Gender'}

第二个问题是使用DataTable而不是DataView绘制仪表板:

new google.visualization.Dashboard(document.getElementById('dashboard')).
// Establish bindings, declaring the both the slider and the category
// picker will drive both charts.
bind([slider, categoryPicker], [pie, table]).
// Draw the entire dashboard.
draw(dview);
 类似资料:
  • 本文向大家介绍html元素哪些标签是不可替换元素?哪些是可替换元素?相关面试题,主要包含被问及html元素哪些标签是不可替换元素?哪些是可替换元素?时的应答技巧和注意事项,需要的朋友参考一下 (replaced element)的展现效果不是由 CSS 来控制的。这些元素是一种外部对象,它们外观的渲染,是独立于 CSS 的。也就是说,css 可以影响元素但是不能影响其内容的显示。 可替换元素: …

  • 本文向大家介绍在Perl中替换数组元素,包括了在Perl中替换数组元素的使用技巧和注意事项,需要的朋友参考一下 现在我们将引入另一个名为splice()的函数,该函数具有以下语法: 语法 此函数将删除由OFFSET和LENGTH指定的@ARRAY元素,如果指定,则将其替换为LIST。最后,它返回从数组中删除的元素。以下是示例- 示例 输出结果 这将产生以下结果- 在这里,实际替换从第6个数字开始,

  • 本文向大家介绍可替换元素和不可替换元素有什么不同的特点?相关面试题,主要包含被问及可替换元素和不可替换元素有什么不同的特点?时的应答技巧和注意事项,需要的朋友参考一下 可替换元素的内容由元素的某些属性的值决定 不可替换元素的内容由子节点的内容决定

  • 问题内容: 我必须搜索一个列表,然后用一个元素替换所有出现的元素。到目前为止,我在代码方面的尝试使我无处可寻,做到这一点的最佳方法是什么? 例如,假设我的列表具有以下整数 我需要将所有出现的数字1替换为值10,所以我需要的输出是 因此,我的目标是将数字1的所有实例替换为数字10。 问题答案:

  • 我正在浏览使用替换的Jaxb继承的Blaise's Bloghttp://blog.bdoughan.com/2010/11/jaxb-and-inheritance-using-substitution.html。 我想实现相同的功能,但不想实现根元素。我将这种类型的XML视为输出。 以下是配置。Java语言 Customer.java 住址Java语言 电话号码。Java语言 Demo.jav

  • 我有一份价值观清单。如何替换Dataframe列中不在给定值列表中的所有值? 例如 我想用“无”替换数据框S列中不在允许值列表中的所有值。我该怎么做?