Vés al contingut

Mòdul:ChartColors

De la Viquipèdia, l'enciclopèdia lliure
Icona de documentació de mòdul Documentació del mòdul [ mostra ] [ modifica el codi ] [ mostra l'historial ] [ refresca ]

Mòdul ChartColors (codi · ús · discussió · proves · tests · casos prova | subpàgines · enllaços)

A continuació es mostra la documentació transclosa de la subpàgina /ús. [salta a la caixa de codi]


Utilitzat per {{ChartColors}} i {{ChartColorLegends}}

Funció ShowColors[modifica]

Codi Resultat
{{#invoke:ChartColors|ShowColors|Categ20|5}}                    
{{ChartColors|Categ20|9}}                                    
{{#invoke:ChartColors|ShowColors|Categ20|3|-}}     #1f77b4       #ff7f0e       #2ca02c  
{{#invoke:ChartColors|ShowColors|Categ20|3|a}}     #1f77b4ff       #ff7f0eff       #2ca02cff  
{{#invoke:ChartColors|ShowColors|Plotter|5}}                    
{{ChartColors|Plotter|20}}                                                                                

Funció Legends[modifica]

{{#invoke:ChartColors|Legends|paleta=Categ20|n_colors=5|n_cols=2}}

produeix:

  • 1f77b4
  • ff7f0e
  • 2ca02c
  • d62728
  • 9467bd

  • {{#invoke:ChartColors|Legends|paleta=Categ20|n_colors=3|n_cols=1|
    línies=
    Un
    Dos
    Tres}}
    

    produeix:

  • Un
  • Dos
  • Tres
  • local p = {}
    
    local SA = require "Module:SimpleArgs"
    local CFCM = require "Module:ComplForColorModules"
    
    local RS = {
    	ColorNameInvalid = 'ColorNameInvalid',
    	ColorNumInvalid = 'ColorNumInvalid',
    	StartNumInvalid = 'StartNumInvalid',
    }
    local i18n = {
    	[RS.ColorNameInvalid] = "Invalid color palette name ($1), it must be ''Categ20'' or ''Plotter''",
    	[RS.ColorNumInvalid] = "The color number should be between 1 and $1 (now $2)",
    	[RS.StartNumInvalid] = "The first color number should be between 1 and $1 (now $2)",
    }
    i18n = SA.loadI18n ('ChartColors', i18n)
    
    local function I18nError (S, ...)
    	return SA.I18nErrorParams (i18n[S], ...)
    end
    
    local category20 = {
    	'#1f77b4', '#aec7e8', '#ff7f0e', '#ffbb78', '#2ca02c', '#98df8a', '#d62728', '#ff9896', '#9467bd', '#c5b0d5', 
    	'#8c564b', '#c49c94', '#e377c2', '#f7b6d2', '#7f7f7f', '#c7c7c7', '#bcbd22', '#dbdb8d', '#17becf', '#9edae5',
    }
    local plotter = {--from Module:Plotter/DefaultColors
    	'red', 'blue', 'green', 'yellow', 'fuchsia', 'aqua', 'brown', 'orange', 'purple', 'sienna',
    	'#F0A3FF', '#191919', '#005C31', 'honeydew', '#808080', 'khaki', 'lime', 'navy', 'pink', '#426600',
    	'#5EF1F2', 'turquoise', '#E0FF66', 'violet', '#FFFF80', '#FF5005',
    }
    
    function p.GetColors (ColorName, IsInv, StartN, N, CallError)
    	local SelColors = {}
    	local ColorNameL = string.lower(ColorName)
    	local Palet0 = {}
    	if ColorNameL == 'categ20' then
    		Palet0 = category20
    	elseif ColorNameL == 'plotter' then
    		Palet0 = plotter 
    	elseif CallError then	
    		I18nError (RS.ColorNameInvalid,ColorName)
    	end	
    	MaxN = table.getn(Palet0)
    	if (N < 0) or (N > MaxN) then
    		I18nError (RS.ColorNumInvalid,tostring(MaxN),tostring(N))
    	else
    		Palet = {}
    		if IsInv then
    			for i=MaxN, 1, -1 do
    				table.insert(Palet, Palet0[i])
    			end	
    		else
    			Palet = Palet0
    		end
    		if StartN > MaxN then
    			I18nError (RS.StartNumInvalid,tostring(MaxN),tostring(StartN))
    		end	
    		local Step = 1
    		local NEnd = N
    		if (ColorNameL == 'categ20') and (N<=10) then 
    			Step = 2
    			if StartN == 1 then
    				NEnd = N*2
    			end	
    		end	
    		if StartN == 1 then
    			for i=1, NEnd, Step do
    				table.insert(SelColors, Palet[i])
    			end
    		else
    			Count = 0
    			for i=StartN, MaxN, Step do
    				table.insert(SelColors, Palet[i])
    				Count = Count + 1
    				if Count == NEnd then
    					break
    				end	
    			end
    			if Count < NEnd then
    				for i=1, MaxN, Step do
    					table.insert(SelColors, Palet[i])
    					Count = Count + 1
    					if Count == NEnd then
    						break
    					end	
    				end
    			end	
    		end	
    		return SelColors
    	end	
    end --GetColors
    
    function p.ColorNameInvStartFromS (S)
    	local StartN = 1
    	local ParamsA = {}
    	function GetStartN (Pos) 	
    		SA.CheckSIsPosInt (ParamsA[Pos])
    		if SA.Error.yes then 
    			p.MsgError()
    		else	
    			StartN = tonumber (ParamsA[Pos])
    		end	
    	end	
    	local ColorName, IsInv
    	ColorName, IsInv, ParamsA = CFCM.ColorNameInvFromS0 (S)
    	local PN = table.getn(ParamsA)
    	if PN > 1 then
    		if ParamsA[2]=='i' then
    			IsInv = true
    		else
    			GetStartN (2)
    		end
    		if PN == 3 then
    			GetStartN (3)
    		end	
    	end	
    	return ColorName, IsInv, StartN
    end --ColorNameInvStartFromS
    
    function ColorNameInv (args, WithName)
    	local S = CFCM.ColorNameInv0 (args, WithName)
    	local ColorName, IsInv, ParamsA = CFCM.ColorNameInvFromS0 (S)
    	local StartN = 1
    	ColorName, IsInv, StartN = p.ColorNameInvStartFromS (S)
    	return ColorName, IsInv, StartN
    end --ColorNameInv	
    
    function p.ShowColors(frame)
    	local args,Nargs = SA.GetArgs (frame)
    	if Nargs > 0 then 
    		local ColorName, IsInv, StartN = ColorNameInv (args, false)
    		local N = SA.RPosInt_Par (args, 2)
    		local WriteColor = SA.Char_Par (args, 3, 'a-', '')
    		local ColorFound = {}
    		ColorFound = p.GetColors (ColorName, IsInv, StartN, N, true)
    		local boxes = {}
    		for i=1, table.getn(ColorFound) do
    			table.insert(boxes, CFCM.Box(ColorFound[i],WriteColor))
    		end	
    		return table.concat(boxes, " ")
    	end	
    end --ShowColors
    
    function p.Legends(frame)
    	local args,Nargs = SA.GetArgs (frame)
    	if Nargs > 0 then 
    		local ColorName, IsInv, StartN = ColorNameInv (args, true)
    		local n_colors = CFCM.N_Colors (args) 
    		local ColorFound = {}
    		ColorFound = p.GetColors (ColorName, IsInv, StartN, n_colors, true)
    		return CFCM.LegendText (args, ColorFound, n_colors)
    	end	
    end	--Legends
    
    return p