-
论文研究-基于雷达图表示的多维数据可视化分类方法.pdf
2019-09-19 17:49:55论文研究-基于雷达图表示的多维数据可视化分类方法.pdf, 傅立叶描述子是分析和识别物体形状的重要方法之一.基于雷达图表示多维数据的原理,提出了一种利用傅立叶描述子... -
论文研究-RPES:一种新的多维数据可视化方法.pdf
2019-09-12 06:48:31针对传统基于降维映射的数据可视化方法计算复杂度高且无法提供维度分布信息的缺点,提出一种基于正2k边形的多维数据可视化方法RPES,通过建立多维数据空间的低维“参照物”——正2k边形坐标系,以减小多维对象在正2k... -
论文研究-非线性多维数据可视化分类预测方法 .pdf
2019-08-21 03:18:13非线性多维数据可视化分类预测方法,李志建,郑新奇,地理信息分类的传统线性算法具有正向直接判定的快速优势,但局限于对已知数据进行线性的判别划分,而非线性未知信息的分类预测同 -
【Matlab】多维数据可视化方法之雷达图和气泡图
2019-09-10 23:43:15今天浏览了Matlab官网,看了一下官网提供的Matlab的绘图工具箱,因为很多之前没有注意到,部分虽然...2. 多维数据可视化之气泡图 2.1 加载数据 2.2 3D气泡图 2.3 可点击图例 2.4 七维数据的3D可视化效果图 2....今天浏览了Matlab官网,看了一下官网提供的Matlab的绘图工具箱,因为很多之前没有注意到,部分虽然自己可以实现,但是功能不够完善,因此,今天做一下工具箱的总结,以用来记录自己的学习过程,详情请移步MathWorks绘图专区入口。
目录
1. 雷达图
雷达图,又称为蜘蛛图,MathWorks中有位大佬提供了具体的画法,这里给出其实例:
%% Example Script %%% % Clear workspace close all; clearvars; clc; % Point properties num_of_points = 6; row_of_points = 4; % Random data P = rand(row_of_points, num_of_points); % Scale points by a factor P(:, 2) = P(:, 2) * 2; P(:, 3) = P(:, 3) * 3; P(:, 4) = P(:, 4) * 4; P(:, 5) = P(:, 5) * 5; % Make random values negative P(1:3, 3) = P(1:3, 3) * -1; P(:, 5) = P(:, 5) * -1; % Create generic labels P_labels = cell(num_of_points, 1); for ii = 1:num_of_points P_labels{ii} = sprintf('Label %i', ii); end % Figure properties figure('units', 'normalized', 'outerposition', [0 0.05 1 0.95]); % Axes properties axes_interval = 2; axes_precision = 1; % Spider plot spider_plot(P, P_labels, axes_interval, axes_precision,... 'Marker', 'o',... 'LineStyle', '-',... 'LineWidth', 2,... 'MarkerSize', 5); % Title properties title('Sample Spider Plot',... 'Fontweight', 'bold',... 'FontSize', 12); % Legend properties legend('show', 'Location', 'southoutside');
笔者喜欢一步到位,下面是雷达图实现的源码,后期可能更新有所不同,不过只要知道大概意思就行,大家可以在次基础上改:
function spider_plot(P, P_labels, axes_interval, axes_precision, varargin) % Create a spider web or radar plot with an axes specified for each column % % spider_plot(P, P_labels, axes_interval, axes_precision) creates a spider % web plot using the points specified in the array P. The column of P % contains the data points and the rows of P contain the multiple sets of % data points. Each point must be accompanied by a label specified in the % cell P_labels. The number of intervals that separate the axes is % specified by axes_interval. The number of decimal precision points is % specified by axes_precision. % % P - [vector | matrix] % P_labels - [cell of string] % axes_interval - [integer] % axes_precision - [integer] % % spider_plot(P, P_labels, axes_interval, axes_precision, line_spec) works % the same as the function above. Additional line properties can be added % in the same format as the default "plot" function in MATLAB. % % line_spec - [character vector] % % %%%%%%%%%%%%%%%%%%% Example of a Generic Spider Plot %%%%%%%%%%%%%%%%%%% % % Clear workspace % close all; % clearvars; % clc; % % % Point properties % num_of_points = 6; % row_of_points = 4; % % % Random data % P = rand(row_of_points, num_of_points); % % % Scale points by a factor % P(:, 2) = P(:, 2) * 2; % P(:, 3) = P(:, 3) * 3; % P(:, 4) = P(:, 4) * 4; % P(:, 5) = P(:, 5) * 5; % % % Make random values negative % P(1:3, 3) = P(1:3, 3) * -1; % P(:, 5) = P(:, 5) * -1; % % % Create generic labels % P_labels = cell(num_of_points, 1); % % for ii = 1:num_of_points % P_labels{ii} = sprintf('Label %i', ii); % end % % % Figure properties % figure('units', 'normalized', 'outerposition', [0 0.05 1 0.95]); % % % Axes properties % axes_interval = 2; % axes_precision = 1; % % % Spider plot % spider_plot(P, P_labels, axes_interval, axes_precision,... % 'Marker', 'o',... % 'LineStyle', '-',... % 'LineWidth', 2,... % 'MarkerSize', 5); % % % Title properties % title('Sample Spider Plot',... % 'Fontweight', 'bold',... % 'FontSize', 12); % % % Legend properties % legend('show', 'Location', 'southoutside'); % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% Point Properties %%% % Number of points [row_of_points, num_of_points] = size(P); %%% Error Check %%% % Check if axes properties are an integer if floor(axes_interval) ~= axes_interval || floor(axes_precision) ~= axes_precision error('Error: Please enter in an integer for the axes properties.'); end % Check if axes properties are positive if axes_interval < 1 || axes_precision < 1 error('Error: Please enter value greater than one for the axes properties.'); end % Check if the labels are the same number as the number of points if length(P_labels) ~= num_of_points error('Error: Please make sure the number of labels is the same as the number of points.'); end % Pre-allocation max_values = zeros(1, num_of_points); min_values = zeros(1, num_of_points); axis_increment = zeros(1, num_of_points); % Normalized axis increment normalized_axis_increment = 1/axes_interval; % Iterate through number of points for ii = 1:num_of_points % Group of points group_points = P(:, ii); % Max and min value of each group max_values(ii) = max(group_points); min_values(ii) = min(group_points); range = max_values(ii) - min_values(ii); % Axis increment axis_increment(ii) = range/axes_interval; % Normalize points to range from [0, 1] P(:, ii) = (P(:, ii)-min(group_points))/range; % Shift points by one axis increment P(:, ii) = P(:, ii) + normalized_axis_increment; end %%% Polar Axes %%% % Polar increments polar_increments = 2*pi/num_of_points; % Normalized max limit of axes axes_limit = 1; % Shift axes limit by one axis increment axes_limit = axes_limit + normalized_axis_increment; % Polar points radius = [0; axes_limit]; theta = 0:polar_increments:2*pi; % Convert polar to cartesian coordinates [x_axes, y_axes] = pol2cart(theta, radius); % Plot polar axes grey = [1, 1, 1] * 0.5; h = line(x_axes, y_axes,... 'LineWidth', 1,... 'Color', grey); % Iterate through all the line handles for ii = 1:length(h) % Remove polar axes from legend h(ii).Annotation.LegendInformation.IconDisplayStyle = 'off'; end %%% Polar Isocurves %%% % Shifted axes interval shifted_axes_interval = axes_interval+1; % Incremental radius radius = (0:axes_limit/shifted_axes_interval:axes_limit)'; % Convert polar to cartesian coordinates [x_isocurves, y_isocurves] = pol2cart(theta, radius); % Plot polar isocurves hold on; h = plot(x_isocurves', y_isocurves',... 'LineWidth', 1,... 'Color', grey); % Iterate through all the plot handles for ii = 1:length(h) % Remove polar isocurves from legend h(ii).Annotation.LegendInformation.IconDisplayStyle = 'off'; end %%% Figure Properties %%% colors = [0, 0.4470, 0.7410;... 0.8500, 0.3250, 0.0980;... 0.9290, 0.6940, 0.1250;... 0.4940, 0.1840, 0.5560;... 0.4660, 0.6740, 0.1880;... 0.3010, 0.7450, 0.9330;... 0.6350, 0.0780, 0.1840]; % Repeat colors is necessary repeat_colors = fix(row_of_points/size(colors, 1))+1; colors = repmat(colors, repeat_colors, 1); %%% Data Points %%% % Iterate through all the rows for ii = 1:row_of_points % Convert polar to cartesian coordinates [x_points, y_points] = pol2cart(theta(1:end-1), P(ii, :)); % Make points circular x_circular = [x_points, x_points(1)]; y_circular = [y_points, y_points(1)]; % Plot data points plot(x_circular, y_circular,... 'Color', colors(ii, :),... 'MarkerFaceColor', colors(ii, :),... varargin{:}); end %%% Axis Properties %%% % Figure background fig = gcf; fig.Color = 'white'; % Iterate through all the number of points for hh = 1:num_of_points % Shifted min value shifted_min_value = min_values(hh)-axis_increment(hh); % Axis label for each row row_axis_labels = (shifted_min_value:axis_increment(hh):max_values(hh))'; % Iterate through all the isocurve radius for ii = 2:length(radius) % Display axis text for each isocurve text(x_isocurves(ii, hh), y_isocurves(ii, hh), sprintf(sprintf('%%.%if', axes_precision), row_axis_labels(ii)),... 'Units', 'Data',... 'Color', 'k',... 'FontSize', 10,... 'HorizontalAlignment', 'center',... 'VerticalAlignment', 'middle'); end end % Label points x_label = x_isocurves(end, :); y_label = y_isocurves(end, :); % Shift axis label shift_pos = 0.07; % Iterate through each label for ii = 1:num_of_points % Angle of point in radians theta_point = theta(ii); % Find out which quadrant the point is in if theta_point == 0 quadrant = 0; elseif theta_point == pi/2 quadrant = 1.5; elseif theta_point == pi quadrant = 2.5; elseif theta_point == 3*pi/2 quadrant = 3.5; elseif theta_point == 2*pi quadrant = 0; elseif theta_point > 0 && theta_point < pi/2 quadrant = 1; elseif theta_point > pi/2 && theta_point < pi quadrant = 2; elseif theta_point > pi && theta_point < 3*pi/2 quadrant = 3; elseif theta_point > 3*pi/2 && theta_point < 2*pi quadrant = 4; end % Adjust text alignment information depending on quadrant switch quadrant case 0 horz_align = 'left'; vert_align = 'middle'; x_pos = shift_pos; y_pos = 0; case 1 horz_align = 'left'; vert_align = 'bottom'; x_pos = shift_pos; y_pos = shift_pos; case 1.5 horz_align = 'center'; vert_align = 'bottom'; x_pos = 0; y_pos = shift_pos; case 2 horz_align = 'right'; vert_align = 'bottom'; x_pos = -shift_pos; y_pos = shift_pos; case 2.5 horz_align = 'right'; vert_align = 'middle'; x_pos = -shift_pos; y_pos = 0; case 3 horz_align = 'right'; vert_align = 'top'; x_pos = -shift_pos; y_pos = -shift_pos; case 3.5 horz_align = 'center'; vert_align = 'top'; x_pos = 0; y_pos = -shift_pos; case 4 horz_align = 'left'; vert_align = 'top'; x_pos = shift_pos; y_pos = -shift_pos; end % Display text label text(x_label(ii)+x_pos, y_label(ii)+y_pos, P_labels{ii},... 'Units', 'Data',... 'HorizontalAlignment', horz_align,... 'VerticalAlignment', vert_align,... 'EdgeColor', 'k',... 'BackgroundColor', 'w'); end % Axis limits axis square; axis([-axes_limit, axes_limit, -axes_limit, axes_limit]); axis off; end
2. 多维数据可视化之气泡图
真的是很棒,之前虽然笔者也曾写过五维的数据可视化气泡图,相比大佬,自叹望尘莫及:Bubbleplot visualization of multi-dimensional data。该工具箱可以创建2维和三维散点图,最多可以利用颜色、形状、大小以及标注文本可视化七个维度的数据信息。绘制气泡图的工具箱源码如下:
function [lh, th] = bubbleplot(x, y, z, siz, col, shape, varargin) % BUBBLEPLOT produces a scatter plot that enables the visualization of upto % 6-dimensional data. The dimensions used for displaying data include the % X, Y and Z coordinates, the marker size, color and shape. % % USAGE: % BUBBLEPLOT(x, y, z, siz, col, shape) % draws a 3D bubble plot. See input parameter description below. % % BUBBLEPLOT(x, y, [], siz, col, shape) % draws a 2D bubble plot. % % BUBBLEPLOT(..., textarray) % enables you to pass in a cell array of strings to annotate each point % on the plot. By default the strings are displayed as text labels as well % as stored in the UserData property of the line objects % % BUBBLEPLOT(..., textarray, 'ShowText', false) % will not display the text on screen, but will store it in the user % data property. This can be useful when creating a custom data tip. % % [hLine, hText] = BUBBLEPLOT(...) % returns a vector of line handles to the points in the plot and % (if appropriate) a vector of handles to the text objects on the % screen. % % INPUT PARAMETERS: % The inputs should be vectors of the same length, with the following % requirements: % Input Required Default-Value Type % x, y, z Yes N/A Numerical (Continuous or discrete) % siz No 8 Numerical (Continuous or discrete) % col No col = z Numerical or Categorical* % shape No 'o' Categorical* (upto 13 unique discrete values) % % NOTES: % * "Categorical" variables can either be numeric with discrete values or % non-numeric data types that support a "UNIQUE" method. Examples of this % can be a cell array of strings, a nominal array or ordinal array. % % * The siz variable is normalized to a marker size range of 3 to 20. To % specify a custom size range use the optional parameter % 'markerSizeLimits'. Example: BUBBLEPLOT(..., 'MarkerSizeLimits', [5 32]) % % * The shape variable can also be a character that represents a marker % shape to be used for all points % % * If col is a categorical variable, ensure it is integer-valued so that % it is handled correctly. If it is not integer valued, BUBBLEPLOT will % check to see if the number of unique values is less than 10% of the % length of the vector and use that to determine if the variable is % categorical. The colors used to depict categorical data are evenly % spaced (1 color level per unique category/label). However if col is % not categorical, its values are simply scaled to different values in % the colormap % % * The default font size used to display the text labels is 8 pt with a % left alignment. Use the input arguments 'FontSize' and 'Alignment' to % control these properties. % Example: BUBBLEPLOT(..., 'FontSize', 6, 'Alignment', 'center') % % * You can specify a custom colormap using the Colormap argument. The % parameter can be a string (eg. 'cool'), a function handle (eg. @jet) or % an N-by-3 matrix of color RGB levels. % Example: BUBBLEPLOT(..., 'ColorMap', cmap) % Copyright 2009-2014 The MathWorks, Inc. %% Parse input params and defaults % Check number of input arguments error(nargchk(2,10,nargin,'struct')); % Default z if nargin < 3 z = []; end % Default size if nargin < 4 || isempty(siz) siz = 8; end if nargin < 5 || isempty(col) col = z; end if nargin < 6 || isempty(shape) shape = 'o'; end p = inputParser; p.addOptional('Text',{},@(x)iscellstr(x)||(ischar(x)&&size(x,1)>1)||(~ischar(x)&&length(x)>1)); p.addParamValue('ShowText',true); p.addParamValue('FontSize',8); p.addParamValue('Alignment', 'left'); p.addParamValue('MarkerSizeLimits',[3 20]); p.addParamValue('ColorMap',@cool); p.parse(varargin{:}); desctext = p.Results.Text; showText = p.Results.ShowText; if isempty(desctext), showText = false; end fontSize = p.Results.FontSize; alignment = p.Results.Alignment; colmapfun = p.Results.ColorMap; markerSizeLimits = p.Results.MarkerSizeLimits; %% Determine marker colors if ischar(colmapfun) colmapfun = str2func(colmapfun); elseif isnumeric(colmapfun) colmapfun = @(x)colmapfun(1:min(x,end),:); end if isempty(col) col = zeros(size(x)); end [uniqueCols, gar, colInd] = unique(col); if isinteger(col) || isa(col,'categorical') || iscell(col) || length(uniqueCols)<=.1*length(col) || all(round(col)==col) % Is col categorical % Generate a colormap with one level per unique entry in col colmap = colmapfun(length(uniqueCols)); else % Scale the color values to span the colormap colmap = colmapfun(256); mx = max(col); n = min(col); if mx == n, mx = n + 1; end colInd = (col-n)/(mx-n)*(size(colmap,1)-1)+1; end try color = colmap(round(colInd),:); catch %#ok<CTCH> error('The custom colormap must have at least %d levels', max(colInd)); end %% Determine marker shape if ischar(shape) markertype = repmat(shape(1),size(x)); else markerseq = 'osd^><vph.*+x'; [uniqueShapes, gar, shapeInd] = unique(shape); if length(uniqueShapes)>length(markerseq) error('BubblePlot can only support 13 unique shapes'); end markertype = markerseq(shapeInd); end %% Determine marker size if isscalar(siz) siz = repmat(siz, size(x)); markersize = siz; else % Map the siz variable to a markersize between a minimum and maximum minsize = markerSizeLimits(1); maxsize = markerSizeLimits(2); markersize = (siz - min(siz))/(max(siz)-min(siz))*(maxsize - minsize)+minsize; end %% Clean up data - handle NaNs markersize(isnan(markersize)) = .01; % These will not be drawn as regular markers, just pixel points %isnan(x) | isnan(y) | isnan(z) | isnan(col) | %% Plot data % Create structure to store original data in every graphics object (for % subsequent retrieval, eg: with data tip) pointData = struct('x',num2cell(x),'y',num2cell(y),'siz',num2cell(siz),'col',num2cell(col),... 'shape',num2cell(shape)); if nargin > 6 && ~isempty(desctext) if ~iscellstr(desctext) desctext = cellstr(desctext); end [pointData.text] = desctext{:}; end if isempty(z) plotfun = @plot; %plotfun = @patch; %zarg = {color(1,:)}; zarg = {}; else plotfun = @plot3; zarg = {z(1)}; zdata = num2cell(z); [pointData.z] = zdata{:}; end lh = zeros(1,length(x)); % Line Handles lh(1) = customPlot(plotfun, pointData(1), color(1,:), markersize(1), markertype(1), x(1), y(1), zarg{:}); for i = 2:length(lh) if isempty(z), zarg = {}; else zarg = {z(i)}; end %if isempty(z), zarg = {color(i,:)}; else zarg = {z(i)}; end lh(i) = customPlot(@line, pointData(i), color(i,:), markersize(i), markertype(i), x(i), y(i), zarg{:}); %lh(i) = customPlot(@patch, pointData(i), color(i,:), markersize(i), markertype(i), x(i), y(i), zarg{:}); end if showText hAxes = get(lh(1),'Parent'); offset = diff(get(hAxes,'Ylim'))*.01; if isempty(z) z = zeros(size(x)); end th = text(x, y-offset, z, desctext, 'Fontsize', fontSize, 'HorizontalAlignment', alignment); lims = get(hAxes,{'XLim','YLim','ZLim'}); lims = vertcat(lims{:}); factor = fontSize.*diff(lims,[],2); addlistener(hAxes,{'XLim','YLim'},'PostSet',@(obj,evdata)resizeText(hAxes, th, y, factor)); %addlistener(get(hAxes,'Parent'),'Resize',@(obj,evdata)resizeText(hAxes, th)); else th = []; end function lh = customPlot(funh, pointData, c, siz, markertype, varargin) lh = funh(varargin{:}); set(lh, 'Marker', markertype,... 'LineStyle', 'none', 'Color', c, ... 'MarkerFaceColor', c, ... 'MarkerEdgeColor', [0 0 0], 'MarkerSize', siz,... 'UserData', struct('Point',pointData)); % lh = patch('XData',x(i),'YData', y(i), 'ZData', z(i), 'Marker', 'o',... % 'LineStyle', 'none', 'CData', color, 'MarkerFaceColor', c, ... % 'MarkerEdgeColor', [0 0 0], 'MarkerSize', siz2(i), 'FaceAlpha', .4, 'EdgeAlpha', .2, ... % 'UserData', data); function resizeText(hAxes, hText, y, factor) %#ok<*INUSD> lims = get(hAxes,{'XLim','YLim','ZLim'}); lims = vertcat(lims{:}); % Uncomment following to update fontsize % newfs = min([factor(1:2)./diff(lims(1:2,:),[],2) ; 24]); % set(hText,'FontSize',newfs); % Update position offset = diff(get(hAxes,'Ylim'))*.01; p = get(hText,'Position'); p = vertcat(p{:}); outofbounds = any(bsxfun(@gt,p,lims(:,2)') | bsxfun(@lt,p,lims(:,1)'), 2); set(hText(outofbounds),'Visible','off'); set(hText(~outofbounds),'Visible','on'); % Adjust offsets p(:,2) = y - offset; for i = 1:length(p) set(hText(i),'Position',p(i,:)); end
2.1 加载数据
加载随机样本数据:
load carsmall Origin = cellstr(Origin);
2.2 3D气泡图
- X: Acceleration (continuous)
- Y: Horsepower (continuous)
- Z: MPG (continuous)
- Size: Weight (continuous)
- Color: Model_Year (discrete, ordinal)
- Shape: Origin
clf bubbleplot(Acceleration, Horsepower, MPG, Weight, Model_Year, Origin); grid on xlabel('Acceleration');ylabel('Horsepower');zlabel('MPG');
2.3 可点击图例
可点击图例可以让你能够隐藏或者强调某一组数据,需要用到 clickableLegend 工具箱的源码如下:
function varargout = clickableLegend(varargin) % clickableLegend Interactive legend for toggling or highlighting graphics % % clickableLegend is a wrapper around the LEGEND function that provides % interactive display toggling or highlighting of lines or patches in a MATLAB % plot. It enables you to, % * Toggle (hide/show) a graphics object (or group) by clicking on an % associated text label in the legend % * Highlight and identify a graphics object (or group) by clicking it. % % Its usage is the same as the <a href="matlab: help legend">LEGEND</a> function with additional % optional parameters. For further information please see the LEGEND documentation. % % ADDITIONAL ARGUMENTS specific to clickableLegend: % These are passed in as parameter-value pairs % % * groups: A vector specifying the group membership for every line object. % The grouping parameter lets you have a group of lines represented and % controlled by one entry in the legend. This can be useful if you would % like to highlight or hide a group of lines by clicking on one legend entry. % CONSIDERATIONS: % # The number of unique entries in the group vector must match the % number of strings in the legend % # When passing a vector of line/patch handles as the first input % argument, the vector should contain all lines/patches whose group % membership is included in the group vector. ie. the length of the % vector of handles must match that of the length of the group vector. % % * displayedLines: A vector of indices corresponding to the lines or groups that % should be displayed initially. This option is useful if there are too % many lines in the figure and you are only interested in looking at a % few at first. % Example: clickableLegend(..., 'displayedLines', [4 5 6]) % % * plotOptions: A cell array of parameter value pairs that define % properties of the graphics objects in the legend. This can be useful, % for example, to ensure consistent marker sizes within the legend. % % Notes: % 1. If you save the figure and re-load it, the toggling functionality % is not automatically re-enabled. To restore it, simply call clickableLegend % with no arguments. % % 2. To prevent the axis from automatically scaling every time a line is % turned on and off, issue the command: axis manual % % Example 1: % z = peaks(100); % plot(z(:,26:5:50)) % grid on; % axis manual; % clickableLegend({'Line1','Line2','Line3','Line4','Line5'}, 'Location', 'NorthWest'); % % Example 2: % f = plot([1:10;1:2:20]','x'); hold on; % g = plot(sin([1:10;1:2:20]'),'r-'); % h = plot(11:20,rand(5,10)*5,'b:'); % clickableLegend([f;g;h], {'Line1','Line2','Line3'},... % 'groups', [1 1 2 2 3 3 3 3 3], 'displayedLines', [2 3]); % % hgsave(gcf, 'testfig.fig'); % hgload testfig.fig % clickableLegend % % See also legend, clickableLegend_examples % Copyright 2009-2014 MathWorks, Inc. % Extract any arguments for clickableLegend [dispinds, groupmem, plotOptions, varargin] = ... extractOptionalArgs(varargin{:}); % Process group memberships [groups, plotObj, varargin] = processGroups(groupmem, varargin{:}); % Create legend [varargout{1:nargout(@legend)}] = legend(varargin{:}); % Extract what is needed for the rest of the function and fix varargout [leghan, objhan, plothan] = varargout{1:3}; % objhan: strings % plothan: graphics objects varargout = varargout(1:nargout); if isempty(groupmem) % Default group membership groupmem = 1:length(plothan); plotObj = plothan; groups = groupmem; end if ~isempty(dispinds) % DisplayedLines parameter was specified hidden = true(1, length(plothan)); dispinds(dispinds>length(plothan)) = []; hidden(dispinds) = false; end % Set the callbacks & plot options for i = 1:length(plothan) set(objhan(i), 'HitTest', 'on', 'ButtonDownFcn',... @(varargin)togglevisibility(objhan(i),plotObj(groupmem==groups(i))),... 'UserData', true); if ~isempty(dispinds) && hidden(i) togglevisibility(objhan(i), plotObj(groupmem==groups(i))); end set(plotObj(groupmem==groups(i)), 'HitTest', 'on', 'ButtonDownFcn', ... @(varargin)highlightObject(objhan(i),plothan(i),... plotObj(groupmem==groups(i)),plotOptions),... 'UserData', false); if ~isempty(plotOptions) set(plothan(i), plotOptions{:}); end end function togglevisibility(hObject, obj) if get(hObject, 'UserData') % It is on, turn it off set(hObject, 'UserData', false); set(obj,'HitTest','off','Visible','off','handlevisibility','off'); else set(hObject, 'UserData', true); set(obj, 'HitTest','on','visible','on','handlevisibility','on'); end function highlightObject(lTextObj, lMarkerObj, plotObj, plotOptions) lw = get(plotObj,'LineWidth'); if ~iscell(lw), lw = {lw}; end; ms = get(plotObj,'MarkerSize'); if ~iscell(ms), ms = {ms}; end; if ~get(plotObj(1), 'UserData') % It is not selected, highlight it %set(hObject, 'FontWeight', 'bold'); set(lTextObj, 'EdgeColor', 'k'); set(plotObj, {'LineWidth', 'MarkerSize'}, [cellfun(@(x)x+2, lw, 'Uniformoutput', false) cellfun(@(x)x+2, ms, 'uniformoutput', false)]); set(plotObj, 'UserData', true); else %set(hObject, 'FontWeight', 'normal'); set(lTextObj, 'EdgeColor', 'none'); set(plotObj, {'LineWidth', 'MarkerSize'}, [cellfun(@(x)x-2, lw, 'Uniformoutput', false) cellfun(@(x)x-2, ms, 'uniformoutput', false)]); set(plotObj, 'UserData', false); end if ~isempty(plotOptions) set(lMarkerObj, plotOptions{:}); end function [dispinds, groupmem, plotOpt, varargin] = extractOptionalArgs(varargin) % Extract the displayedlines and/or groups arguments if specified ind = find(strcmpi(varargin,'DisplayedLines')); if ~isempty(ind) assert(ind<nargin, 'The DisplayedLines parameter value must be specified'); dispinds = varargin{ind+1}; varargin(ind:ind+1) = []; else dispinds = []; end ind = find(strcmpi(varargin,'groups')); if ~isempty(ind) assert(ind < nargin, 'The groups parameter value must be specified'); groupmem = varargin{ind+1}; varargin(ind:ind+1) = []; else groupmem = []; end ind = find(strcmpi(varargin,'plotoptions')); if ~isempty(ind) assert(ind < nargin, 'The plotOptions parameter value must be specified'); plotOpt = varargin{ind+1}; varargin(ind:ind+1) = []; else plotOpt = {}; end function [groups, obj, varargin] = processGroups(groupmem, varargin) if isempty(groupmem) groups = []; obj = []; return; end if iscellstr(groupmem) groupmem = categorical(groupmem); end groups = unique(groupmem); firstmem = zeros(size(groups)); if nargin > 1 && ishandle(varargin{1}(1)) if strcmpi(get(varargin{1}(1),'Type'),'axes') hAxes = varargin{1}(1); obj = flipud([findobj(hAxes,'Type','line');findobj(hAxes,'Type','patch')]); else % It's a line/patch obj = varargin{1}; [~,firstmem] = ismember(groups, groupmem); %for i = 1:length(groups) % firstmem(i) = find(groupmem==groups(i),1); %end varargin{1} = obj(firstmem); end else hAxes = gca; obj = flipud([findobj(hAxes,'Type','line');findobj(hAxes,'Type','patch')]); end
实例代码如下:
clf h = bubbleplot(Acceleration, Horsepower, MPG, Weight, Model_Year, Origin); grid on xlabel('Acceleration');ylabel('Horsepower');zlabel('MPG'); clickableLegend(h, unique(Origin), 'groups', Origin, 'plotOptions', ... {'MarkerSize', 8, 'MarkerFaceColor', 'c'});
2.4 七维数据的3D可视化效果图
- X: Acceleration (continuous)
- Y: Horsepower (continuous)
- Z: MPG (continuous)
- Size: Weight (continuous)
- Color: Model_Year (discrete, ordinal)
- Shape: Cylinders
- Text: Origin
clf bubbleplot(Acceleration, Horsepower, MPG, Weight, Model_Year, Cylinders,... Origin, 'fontSize',6); grid on xlabel('Acceleration');ylabel('Horsepower');zlabel('MPG');
2.5 五维数据的2D可视化效果图
- X: Horsepower (continuous)
- Y: MPG (continuous)
- Size: Acceleration (continuous)
- Color: Displacement (continuous)
- Shape: Origin
- Text: Manufacturer
clf h = bubbleplot(Horsepower, MPG, [], Acceleration, Displacement, Origin,... Mfg, 'fontSize', 6); xlabel('Horsepower');ylabel('MPG'); grid on; clickableLegend(h, unique(Origin), 'groups', Origin, 'plotOptions', ... {'MarkerSize', 8, 'MarkerFaceColor', 'c'});
-
将多维数据的分布显示_如何进行多维数据可视化
2021-01-11 20:13:17要说多维分析就首先需要了解一下常用的分析方法OLAP(OnLine Analysis Processing ,联机分析处理 ) ,OLAP联机分析处理...在DataViz可视化数据分析软件中进行OLAP联机分析处理非常简单,只要简单的拖拽就可以实现多...要说多维分析就首先需要了解一下常用的分析方法OLAP(OnLine Analysis Processing ,联机分析处理 ) ,OLAP联机分析处理可以让分析人员迅速、一致、交互地从各个方面观察信息,以达到深入理解数据的目的。OLAP的基本多维分析操作有钻取(上卷、下钻)、钻透、切片和切换以及旋转等。
在DataViz可视化数据分析软件中进行OLAP联机分析处理非常简单,只要简单的拖拽就可以实现多维度数据可视化分析。
在进行多维分析前,首先我们来了解两个基本概念“维度”和“度量”。
- 维度:
在 DataViz产品中,一般情况下,将字符型、时间型字段归纳为“维度”,通过拖拽的形式,我们可以将多个维度创建成一个维度层次,基于维度层次,进行上卷、下钻、钻透等操作。维度层次内部也可以调整层次之间的顺序关系。并且,对于时间维度来说,当拖拽到绑定区域后,自动形成时间维度层次。
- 度量:
DataViz产品中将数值型字段归纳为“度量”,也就是我们要统计分析的对象。
DataViz中进行多维数据可视化分析,可以通过以下方法。
1. 基于OLAP进行上卷、下钻、切片、切块分析
OLAP的基本多维分析操作有钻取(上卷、下钻)、钻透、切片和切换以及旋转等。
- 钻取,即改变维的层次,变换分析的粒度,包括向下钻取(下钻)和向上钻取(上卷),下钻是从汇总数据深入到细节数据进行观察,而上卷则正好相反,是将低层次的细节数据概括到高层次的汇总数据。
- 切片和切块:是在一部分维上选定值后,关心度量数据在剩余维上的分布。如果剩余的维只有两个,则是切片;如果有三个或以上,则是切块。
- 旋转:是变换维的方向,即在表格中重新安排维的放置。
在DataViz中通过拖拽的形式,我们可以将多个维度创建成一个维度层次,基于维度层次,进行上卷、下钻、钻透等操作。维度层次内部也可以调整层次之间的顺序关系。并且,对于时间维度来说,当拖拽到绑定区域后,自动形成时间维度层次。
如下图,可以通过“下钻到城市”和“上卷至地区”来实现下钻和上卷。
可以通过“详细信息”来实现“数据钻透”,显示数据详细信息
当我们以某一维度分析数据时,可以添加任意维度或度量的过滤条件,来实现在该维度上切片、切块。
2. 多表联动
当进行多维分析时,为了能更清晰的查看分析结果,可以将多表联动和OLAP结合使用。
3. 数据透视
DataViz产品提供了类似Excel数据透视表的功能,也可以通过数据透视表进行多维数据分析。
在 DataViz产品中,可以通过多种方式实现多维度数据可视化分析,实现数据的立体式呈现,发现数据中隐藏的价值和规律。
-
pyecharts多维数据可视化
2021-02-04 15:17:19文章目录前言单图中多列数据并列图的布局图形的并列图形选项卡时间线轮播3d柱状图与热图3d柱状图热图店铺特征矩阵的构建散点图平行坐标系 前言 所谓多维,就是数据不仅仅有x,y两列,而是有多列数据特征需要展示。...前言
所谓多维,就是数据不仅仅有x,y两列,而是有多列数据特征需要展示。这里主要分为两类展示方法,一类是用多张图展示多个数据,一类是一张图上展示多列数据。
导包:
import numpy as np import pandas as pd import matplotlib.pyplot as plt import json from pandas.io.json import json_normalize from collections import Counter
单图中多列数据并列
读入数据和数据预处理:
#导入男鞋数据 op1=open(r'D:\python学习\数据分析与可视化数据\shoes.json', 'r',encoding='utf-8') li=[] dict1={} for i in op1: k=json.loads(i.encode("utf-8"))#把字符串转换为json li.append(k) a=json_normalize(li)#把由json数据构成的列表转换成数据框 a.groupby("nick").size().sort_values(ascending=False)#按店铺排序,nick是店铺的列名称
我们按店铺排序得到了上面的结果,现在计算上面排名前二的两个商家各个款式的对应的商品数量,并且组成矩阵,使得第一列是"意尔康皮鞋旗舰店"对应的商品数量,第二列是"米兰多格商场"的:t1=a[a.nick=="意尔康皮鞋旗舰店"].groupby("info.款式").size()#=a[a.nick=="意尔康皮鞋旗舰店"]是导出该店铺的所有数据,groupby("info.款式")表示根据不同款式分组 t2=a[a.nick=="米兰多格商场"].groupby("info.款式").size() p0=pd.concat([t1,t2],axis=1,sort=False).fillna(0)#拼成数据框,concat的好处是可以包容索引不对齐的情况,axis=1表示横向合并,fillna(0)表示不存在的变成0
结果如下:
利用上面的数据做出如下的柱图,注意这里包含了两个商家的数据图的布局
导入作图的包:
from pyecharts.globals import ThemeType from pyecharts.faker import Faker from pyecharts import options as opts from pyecharts.charts import Bar
把两列数据放在一起:
只需要增加bar.add_yaxis()bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.PURPLE_PASSION)) bar.add_xaxis(p0[0].index.tolist()) bar.add_yaxis("意尔康皮鞋旗舰店", p0[0].tolist()) bar.add_yaxis("米兰多格商场", p0[1].tolist()) bar.set_global_opts(title_opts=opts.TitleOpts(title="某商场销售情况"),toolbox_opts=opts.ToolboxOpts()) bar.render_notebook()
结果如下:
图形的并列
我们同样也可以让多图在一个界面中显示,做的逻辑就是先分别作图,然后利用一个函数把它们加在一起。
from pyecharts.faker import Faker from pyecharts import options as opts from pyecharts.charts import Bar, Grid, Line,Scatter#导入Grid #先做一个图 f1=Bar() f1.add_xaxis(p0.index.tolist()) f1.add_yaxis("意尔康皮鞋旗舰店", p0[0].tolist()) f1.set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="我是副标题"), legend_opts=opts.LegendOpts(pos_left="25%")) #做第二个图 f2=Bar() f2.add_xaxis(p0.index.tolist()) f2.add_yaxis("米兰多格商场", p0[1].tolist()) f2.set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="我是副标题"), legend_opts=opts.LegendOpts(pos_right="25%")) #把两个图合并 g1 = Grid() g1.add(f1,grid_opts=opts.GridOpts(pos_left="55%")) g1.add(f2,grid_opts=opts.GridOpts(pos_right="55%")) g1.render_notebook()
结果如下:
图形选项卡
用选项卡的形式做两个图,点哪个选项就出现什么图。实现的逻辑就是先把每一个图做出来,然后用tab函数来运行。
from pyecharts.charts import Tab#导入Tab from pyecharts.components import Table f1=Bar() f1.add_xaxis(p0.index.tolist()) f1.add_yaxis("意尔康皮鞋旗舰店", p0[0].tolist()) f1.set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="我是副标题")) f2=Bar() f2.add_xaxis(p0.index.tolist()) f2.add_yaxis("米兰多格商场", p0[1].tolist()) f2.set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="我是副标题")) tab = Tab() tab.add(f1, "意尔康皮鞋旗舰店") tab.add(f2, "米兰多格商场") tab.render_notebook()
结果如下:
时间线轮播
时间线轮播也是多图的形式,以滚动呈现。
from pyecharts.charts import Timeline f1=Bar() f1.add_xaxis(p0.index.tolist()) f1.add_yaxis("意尔康皮鞋旗舰店", p0[0].tolist()) f1.set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="我是副标题")) f2=Bar() f2.add_xaxis(p0.index.tolist()) f2.add_yaxis("米兰多格商场", p0[1].tolist()) f2.set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="我是副标题")) tl = Timeline() tl.add(f1, "意尔康皮鞋旗舰店") tl.add(f2, "米兰多格商场") tl.render_notebook()
结果如下:
3d柱状图与热图
- 对于多维数据,3d图是非常形象的表现方法,x,y轴通常表示两个条件限定,z轴(柱的高度)通常表示在这样限定下的数量
- 注意pyecharts3d柱状图的数据格式,x,y分别对应有哪些类别,通常是一个列表,而data是一个三元列表,前两个为确定哪两个类别,通过序号指代,最后一个为数量
导包:
from pyecharts.faker import Faker from pyecharts import options as opts from pyecharts.charts import Bar3D import random
3d柱状图
根据例子来理解3d柱状图,求出"info.鞋面材质","info.风格"这两个特征下商品的数量
#因为x、y有很多重复的,所有需要进行一定的处理 x=[] y=[] data=[]#data是放x、y 的索引的 n=0 for i in p0.items(): if i[0][0] not in x: x.append(i[0][0]) if i[0][1] not in y: y.append(i[0][1]) data.append([x.index(i[0][0]),y.index(i[0][1]),i[1]]) f3=Bar3D() f3.add("",data, xaxis3d_opts=opts.Axis3DOpts(x, type_="category"), yaxis3d_opts=opts.Axis3DOpts(y, type_="category"), zaxis3d_opts=opts.Axis3DOpts(type_="value") ).set_global_opts( visualmap_opts=opts.VisualMapOpts(max_=20), title_opts=opts.TitleOpts(title="Bar3D-基本示例"), ) f3.render_notebook()
结果如下:
热图
import random from pyecharts.faker import Faker from pyecharts import options as opts from pyecharts.charts import HeatMap f4=HeatMap() f4.add_xaxis(x) f4.add_yaxis("series0", y, data) f4.set_global_opts( title_opts=opts.TitleOpts(title="HeatMap-基本示例"), visualmap_opts=opts.VisualMapOpts(), ) f4.render_notebook()
结果如下:
店铺特征矩阵的构建
#把商品销量提取出来,并把对应列表的类型转化为数 a.sales=a.sales.str.split("人",expand=True)[0] a.sales = a.sales.astype(np.int64)#转换列的类型为整数 a.price = a.price.astype(np.float) #求出各个商品的销售额并把它并入到原始数据框中去 z1=a.sales*a.price#算出商品的销售额 z1.name="xse" a1=pd.concat([a,z1],axis=1)#给序列命名之后添加入数据框就会直接以序列名作为列标 先做成字典,把各个特征放入字典中 te_zheng={"nick":[],"z_xse":[],"z_num":[],"p_sales":[],"p_bdj":[],"p_price":[]} for i in a1.groupby("nick"):#循环i对应的是店铺的名称,分组里面每一组的商品都属于同一个店的 te_zheng["nick"].append(i[0]) te_zheng["z_xse"].append(i[1].xse.sum()) te_zheng["z_num"].append(len(i[1])) te_zheng["p_sales"].append(round(i[1].sales.mean(),1)) if i[1].sales.sum()==0:#存在除零的情况,所以做判断 te_zheng["p_bdj"].append(0) else: te_zheng["p_bdj"].append(round(i[1].xse.sum()/i[1].sales.sum(),1)) te_zheng["p_price"].append(round(i[1].price.mean(),1)) # 把字典转化为数据框,并基于销售额排序 df_te_zheng=pd.DataFrame(te_zheng) df_te_zheng.sort_values(by="z_xse",ascending=False,inplace=True) df_te_zheng.head()
结果如下:
散点图
from pyecharts.charts import Scatter#导入散点图的包 f1=Scatter() f1.add_xaxis(df_te_zheng[0:20].z_xse.tolist()) f1.add_yaxis("商家A",df_te_zheng[0:20].p_bdj.tolist()) f1.set_global_opts(xaxis_opts=opts.AxisOpts(type_='value'))#注意pyechart的x轴通常默认为类别轴,需要重新设定为数值轴 f1.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) f1.render_notebook()
平行坐标系
- 平行坐标系是能够展示数据维度最自由的图形,但是最好对象不要太多
- 注意平行坐标系的数据格式
利用商家的特征矩阵,做出排名前五的商家的平行坐标系,并基于适当的分析
from pyecharts import options as opts from pyecharts.charts import Page, Parallel z1=df_te_zheng.head(5) z1 for i in z1.iterrows(): print(i[1].tolist()[1:]) data1=[] for i in z1.iterrows(): data1.append(i[1].tolist()[1:]) data1 f2=Parallel().add_schema( [ {"dim": 0, "name": "z_xse"},#注意这里的序号对应于data1中列表的索引 {"dim": 1, "name": "z_num"}, {"dim": 2, "name": "p_sales"}, {"dim": 3, "name": "p_bdj"}, {"dim": 4, "name": "p_price"}, ] ) f2.add("parallel", data1) f2.set_global_opts(title_opts=opts.TitleOpts(title="Parallel-基本示例")) f2.render_notebook()
结果如下:
-
将多维数据的分布显示_如何使用DataViz数据分析软件进行多维数据可视化分析...
2021-01-11 20:13:05要说多维分析就首先需要了解一下常用的分析方法OLAP(OnLine Analysis Processing ,联机分析处理 ) ,OLAP联机分析处理...在DataViz可视化数据分析软件中进行OLAP联机分析处理非常简单,只要简单的拖拽就可以实现...要说多维分析就首先需要了解一下常用的分析方法OLAP(OnLine Analysis Processing ,联机分析处理 ) ,OLAP联机分析处理可以让分析人员迅速、一致、交互地从各个方面观察信息,以达到深入理解数据的目的。OLAP的基本多维分析操作有钻取(上卷、下钻)、钻透、切片和切块以及旋转等。
在DataViz可视化数据分析软件中进行OLAP联机分析处理非常简单,只要简单的拖拽就可以实现多维度数据可视化分析。
在进行多维分析前,首先我们来了解两个基本概念“维度”和“度量”。- 维度:
在 DataViz产品中,一般情况下,将字符型、时间型字段归纳为“维度”,通过拖拽的形式,我们可以将多个维度创建成一个维度层次,基于维度层次,进行上卷、下钻、钻透等操作。维度层次内部也可以调整层次之间的顺序关系。并且,对于时间维度来说,当拖拽到绑定区域后,自动形成时间维度层次。
- 度量:
DataViz产品中将数值型字段归纳为“度量”,也就是我们要统计分析的对象。
DataViz中进行多维数据可视化分析,可以通过以下方法。
1. 基于OLAP进行上卷、下钻、切片、切块分析
OLAP的基本多维分析操作有钻取(上卷、下钻)、钻透、切片和切换以及旋转等。- 钻取,即改变维的层次,变换分析的粒度,包括向下钻取(下钻)和向上钻取(上卷),下钻是从汇总数据深入到细节数据进行观察,而上卷则正好相反,是将低层次的细节数据概括到高层次的汇总数据。
- 切片和切块:是在一部分维上选定值后,关心度量数据在剩余维上的分布。如果剩余的维只有两个,则是切片;如果有三个或以上,则是切块。
- 旋转:是变换维的方向,即在表格中重新安排维的放置。
在DataViz中通过拖拽的形式,我们可以将多个维度创建成一个维度层次,基于维度层次,进行上卷、下钻、钻透等操作。维度层次内部也可以调整层次之间的顺序关系。并且,对于时间维度来说,当拖拽到绑定区域后,自动形成时间维度层次。
如下图,可以通过“下钻到城市”和“上卷至地区”来实现下钻和上卷。
可以通过“详细信息”来实现“数据钻透”,显示数据详细信息
当我们以某一维度分析数据时,可以添加任意维度或度量的过滤条件,来实现在该维度上切片、切块。
2. 多表联动
当进行多维分析时,为了能更清晰的查看分析结果、创建数据分析报告,可以将多表联动和OLAP结合使用。
3. 数据透视
DataViz产品提供了类似Excel数据透视表的功能,也可以通过数据透视表进行多维数据分析。在 DataViz产品中,可以通过多种方式实现多维度数据可视化分析,实现数据的立体式呈现,发现数据中隐藏的价值和规律。
数据分析软件-大数据分析软件,可视化数据分析软件_东软平台云cloud.neusoft.com -
将多维数据的分布显示_如何试用DataViz数据分析软件进行多维数据可视化分析...
2021-01-11 20:13:14要说多维分析就首先需要了解一下常用的分析方法OLAP(OnLine Analysis Processing ,联机分析处理 ) ,OLAP联机分析处理...在DataViz可视化数据分析软件中进行OLAP联机分析处理非常简单,只要简单的拖拽就可以实现... -
如何使用DataViz数据分析软件进行多维数据可视化分析
2019-09-17 11:14:23要说多维分析就首先需要了解一下常用的分析方法OLAP(OnLine Analysis Processing ,联机分析处理 ) ,OLAP联机分析处理可以让分析...在DataViz可视化数据分析软件中进行OLAP联机分析处理非常简单,只要简单的拖拽就... -
多维数据的地图可视化
2016-07-19 19:32:00大数据可视化是通过图表将隐藏在数据中的信息...有着不同特点的数据,可视化的方法也是多种多样的,同一组数据也可以有截然不同形式的可视化表现。数据可视化的目的是为了方便用户更好地进行模拟与计算。可视化不... -
简单易学多维数据可视化R实现:神奇的卡通脸谱图Chernoff faces
2017-05-02 21:05:00.Chernoff face是由美国统计学家Chernoff在1976年率先提出的,用脸谱来分析多维度数据,即将P个维度的数据用人脸部位的形状或大小来表征。 他首先将该方法用于聚类分析,引起了各国统计学家的极大兴趣,并对他的... -
物理海洋数据可视化分析方法研究
2020-02-12 14:58:18物理海洋数据可视化分析方法研究,张玉娟,郭东琳,当前物理海洋数据突显出网格模型复杂化、高维、时变、海量的发展趋势,在查询统计、制图表达等方面面临严峻挑战。论文在对多维物 -
数据可视化---以小见大,数据可视化基础讲解
2020-07-03 17:22:06一. 数据可视化及基本特征 ...4 多维数据可视化 一. 数据可视化及基本特征 数据可视化是数据加工和处理的基本方法之一,它通过图形图像 等技术来更为直观地表达数据,从而为发现数据的隐含规律提供技术手段.. -
《JavaScript数据可视化编程》——1.6 使用雷达图显示多维数据
2017-05-02 11:55:00本节书摘来自异步社区《JavaScript数据可视化编程》一书中的第1章第1.6节作者 【美】Stephen A.Thomas 译者 翟东方 , 张超 , 刘畅 责编 陈冀康更多章节内容可以访问云栖社区“异步社区”公众号查看。 1.6 使用雷达图... -
数据预处理——数据可视化的常用方法
2019-01-04 19:55:42基于像素的可视化技术:每一维度创建一个窗口,记录的m个维值映射到m个像素,像素颜色的深浅代表着对应的值。缺点在于对于我们理解多维空间的数据分布帮助不大。 从该图中,可以发现:income与credit_limit为一... -
echart 实现多层轴_可以实现多维数据的平行坐标图的可视化工具
2021-01-04 21:28:10平行坐标是可视化高维几何和分析多元数据的常用方法。此可视化与时间序列可视化密切相关,不同之处在于它适用于轴与时间点不对应且因此没有自然顺序的数据。因此,可能需要关注不同的轴布置。能够实现这些的工具比较... -
论文研究-基于分段线性表示的时变数据可视化方法 .pdf
2019-08-15 11:15:19基于分段线性表示的时变数据可视化方法,王子慧,鄂海红,随着信息技术的快速发展,时变数据普遍具有大规模,多维等属性。为清晰直观地展示时变数据,兼顾其本身属性和时间维度的有序性, -
慕课笔记-数据科学导论-第七章数据可视化-数据可视化发展历程/分类/数据可视化工具/案例/科学可视化/信息...
2020-03-06 23:01:26数据可视化 (1)可视化 (1)可视化的含义 定义 可视化是一种使复杂信息能够容易和快速被人理解的手段,是一种聚焦在信息重要特征的信息压缩,是可以放大人类感知的图形化表示方法。 可视化为人类大脑与... -
大数据知识体系_探索数据_数据汇总_可视化_多维数据分析
2017-12-01 11:23:36探索数据 汇总统计 频率和众数 分类属性的众数是具有最高频率的值 百分位数 位置度量:均值和中位数 截断均值 ... 可视化 动机 一般概念 表示:将数据映射到图形元素 安排 选择 -
可视化:python绘制多组多维数据雷达图
2019-03-25 16:00:18python绘制多组多维数据雷达图 所使用的数据如下所示:每一行是一个样本,每个样本有4维特征(列)。 封装一个雷达图的绘图方法: import numpy as np import matplotlib.pyplot as plt from matplotlib ... -
【智能决策 数据分析】数据可视化
2020-09-24 11:41:58可视化(Visualization)是利用计算机图形学和图像处理技术,将数据转换成图形或图像在屏幕上显示出来,并进行交互处理的理论、方法和技术。可视化特点:1、可视化可以较快的传递信息,多维的展示数据。2、可视化... -
【数据分析实战训练营】数据可视化
2020-11-27 11:04:31可视化(Visualization)是利用计算机图形学和图像处理技术,将数据转换成图形或图像在屏幕上显示出来,并进行交互处理的理论、方法和技术。可视化特点:1、可视化可以较快的传递信息,多维的展示数据。2、可视化... -
【数据分析】第八周 数据可视化
2020-09-24 11:37:44可视化(Visualization)是利用计算机图形学和图像处理技术,将数据转换成图形或图像在屏幕上显示出来,并进行交互处理的理论、方法和技术。可视化特点:1、可视化可以较快的传递信息,多维的展示数据。2、可视化... -
python笔记35_2:数据可视化之多维柱状图
2019-03-11 09:47:08链接:... 提取码:fb0c # -*- coding: utf-8 -*- #多维柱形图的绘制方法: import numpy import pandas import matplotlib from matplotlib import pyplot as plt font = { '... -
如何做好数据可视化分析?
2018-08-17 17:10:41数据可视化的实质是借助图形化手段,清晰有效的传达与沟通信息,使通过数据表达的内容更容易被理解。 那么,怎样来分析大量、复杂和多维的数据呢?答案是要提供直观的、可交互的和反应灵敏的可视化环境。因此,数据... -
数据可视化之美
2017-10-25 23:29:23基本的可视化展现方式,如条形图、折线图、饼图、雷达图可以很容易通过...如果对地理空间数据、社会网络关系、多维数据进行可视化,直观地传递数据期望表达的信息是需要特定的图表类型来展示。 让我们一起来看几个 -
matlab 子图title的位置_MATLAB数据可视化
2021-01-01 12:31:07数据可视化数据可视化(Data Visualization)是指运用计算机图形学和图像处理技术,将数据转换为图形或图像在屏幕上显示出来,并进行交互处理的理论、方法和技术。它涉及计算机图形学、图像处理、计算机辅助设计、... -
论文研究-一种聚类挖掘结果的可视化方法.pdf
2019-07-22 19:31:14简要介绍了数据挖掘、聚类分析及多维数据可视化,提出将Kmeans算法输出的多维结果集通过主分量分析转换为3D空间点坐标,实现数据挖掘结果的可视化。 -
高维非空间数据可视化
2019-02-21 19:39:17高维数据可视化 数据变换 降低维度: 使用线性或非线性变换把高维数据投影到低维空间 投影保留重要的关系(无信息损失;保持数据区分等) 方法: 线性方法 主成分分析(PCA) 多维尺度分析...