#6200 Add option to sort by Correlation Matrix by rows/columns or both

This commit is contained in:
Gaute Lindkvist 2020-07-27 09:43:47 +02:00
parent 054d2864f6
commit 651277e587
2 changed files with 41 additions and 13 deletions

View File

@ -54,6 +54,19 @@
#include <map> #include <map>
#include <set> #include <set>
namespace caf
{
template <>
void caf::AppEnum<RimCorrelationMatrixPlot::Sorting>::setUp()
{
addItem( RimCorrelationMatrixPlot::Sorting::NO_SORTING, "NO_SORTING", "No Sorting" );
addItem( RimCorrelationMatrixPlot::Sorting::ROWS, "SORT_ROWS", "Sort Rows" );
addItem( RimCorrelationMatrixPlot::Sorting::COLUMNS, "SORT_COLUMNS", "Sort Columns" );
addItem( RimCorrelationMatrixPlot::Sorting::BOTH, "SORT_BOTH", "Sort Both Rows/Columns" );
setDefault( RimCorrelationMatrixPlot::Sorting::BOTH );
}
} // namespace caf
CAF_PDM_SOURCE_INIT( RimCorrelationMatrixPlot, "CorrelationMatrixPlot" ); CAF_PDM_SOURCE_INIT( RimCorrelationMatrixPlot, "CorrelationMatrixPlot" );
class CorrelationMatrixShapeItem : public QwtPlotShapeItem class CorrelationMatrixShapeItem : public QwtPlotShapeItem
@ -139,7 +152,7 @@ RimCorrelationMatrixPlot::RimCorrelationMatrixPlot()
CAF_PDM_InitFieldNoDefault( &m_correlationFactor, "CorrelationFactor", "Correlation Factor", "", "", "" ); CAF_PDM_InitFieldNoDefault( &m_correlationFactor, "CorrelationFactor", "Correlation Factor", "", "", "" );
m_correlationFactor.uiCapability()->setUiEditorTypeName( caf::PdmUiComboBoxEditor::uiEditorTypeName() ); m_correlationFactor.uiCapability()->setUiEditorTypeName( caf::PdmUiComboBoxEditor::uiEditorTypeName() );
CAF_PDM_InitField( &m_showAbsoluteValues, "CorrelationAbsValues", false, "Show Absolute Values", "", "", "" ); CAF_PDM_InitField( &m_showAbsoluteValues, "CorrelationAbsValues", false, "Show Absolute Values", "", "", "" );
CAF_PDM_InitField( &m_sortByValues, "CorrelationSorting", true, "Sort Matrix by Values", "", "", "" ); CAF_PDM_InitFieldNoDefault( &m_sortByValues, "CorrelationSorting", "Sort Matrix by Values", "", "", "" );
CAF_PDM_InitField( &m_sortByAbsoluteValues, "CorrelationAbsSorting", true, "Sort by Absolute Values", "", "", "" ); CAF_PDM_InitField( &m_sortByAbsoluteValues, "CorrelationAbsSorting", true, "Sort by Absolute Values", "", "", "" );
CAF_PDM_InitField( &m_excludeParametersWithoutVariation, CAF_PDM_InitField( &m_excludeParametersWithoutVariation,
"ExcludeParamsWithoutVariation", "ExcludeParamsWithoutVariation",
@ -229,11 +242,11 @@ void RimCorrelationMatrixPlot::defineUiOrdering( QString uiConfigName, caf::PdmU
correlationGroup->add( &m_excludeParametersWithoutVariation ); correlationGroup->add( &m_excludeParametersWithoutVariation );
correlationGroup->add( &m_showAbsoluteValues ); correlationGroup->add( &m_showAbsoluteValues );
correlationGroup->add( &m_sortByValues ); correlationGroup->add( &m_sortByValues );
if ( !m_showAbsoluteValues() && m_sortByValues() ) if ( !m_showAbsoluteValues() && m_sortByValues() != Sorting::NO_SORTING )
{ {
correlationGroup->add( &m_sortByAbsoluteValues ); correlationGroup->add( &m_sortByAbsoluteValues );
} }
if ( m_sortByValues() ) if ( m_sortByValues() != Sorting::NO_SORTING )
{ {
correlationGroup->add( &m_showOnlyTopNCorrelations ); correlationGroup->add( &m_showOnlyTopNCorrelations );
if ( m_showOnlyTopNCorrelations() ) if ( m_showOnlyTopNCorrelations() )
@ -507,22 +520,28 @@ void RimCorrelationMatrixPlot::createMatrix()
} }
eraseInvalidEntries( correlationMatrixColumns ); eraseInvalidEntries( correlationMatrixColumns );
if ( m_sortByValues() ) sortEntries( correlationMatrixColumns, m_sortByAbsoluteValues() || m_showAbsoluteValues() ); if ( m_sortByValues() == Sorting::COLUMNS || m_sortByValues() == Sorting::BOTH )
if ( m_sortByValues() && m_showOnlyTopNCorrelations && m_topNFilterCount < correlationMatrixColumns.size() )
{ {
correlationMatrixColumns.erase( correlationMatrixColumns.begin() + m_topNFilterCount(), sortEntries( correlationMatrixColumns, m_sortByAbsoluteValues() || m_showAbsoluteValues() );
correlationMatrixColumns.end() );
if ( m_showOnlyTopNCorrelations && m_topNFilterCount < correlationMatrixColumns.size() )
{
correlationMatrixColumns.erase( correlationMatrixColumns.begin() + m_topNFilterCount(),
correlationMatrixColumns.end() );
}
} }
auto correlationMatrixRows = transpose( correlationMatrixColumns ); auto correlationMatrixRows = transpose( correlationMatrixColumns );
eraseInvalidEntries( correlationMatrixRows ); eraseInvalidEntries( correlationMatrixRows );
if ( m_sortByValues() ) sortEntries( correlationMatrixRows, m_sortByAbsoluteValues() || m_showAbsoluteValues() ); if ( m_sortByValues() == Sorting::ROWS || m_sortByValues() == Sorting::BOTH )
if ( m_showOnlyTopNCorrelations && m_topNFilterCount < correlationMatrixRows.size() )
{ {
correlationMatrixRows.erase( correlationMatrixRows.begin() + m_topNFilterCount(), correlationMatrixRows.end() ); sortEntries( correlationMatrixRows, m_sortByAbsoluteValues() || m_showAbsoluteValues() );
if ( m_showOnlyTopNCorrelations && m_topNFilterCount < correlationMatrixRows.size() )
{
correlationMatrixRows.erase( correlationMatrixRows.begin() + m_topNFilterCount(), correlationMatrixRows.end() );
}
} }
for ( size_t rowIdx = 0u; rowIdx < correlationMatrixRows.size(); ++rowIdx ) for ( size_t rowIdx = 0u; rowIdx < correlationMatrixRows.size(); ++rowIdx )

View File

@ -40,6 +40,15 @@ public:
using CorrelationFactor = RimCorrelationPlot::CorrelationFactor; using CorrelationFactor = RimCorrelationPlot::CorrelationFactor;
using CorrelationFactorEnum = RimCorrelationPlot::CorrelationFactorEnum; using CorrelationFactorEnum = RimCorrelationPlot::CorrelationFactorEnum;
enum class Sorting
{
NO_SORTING,
ROWS,
COLUMNS,
BOTH,
};
using SortingEnum = caf::AppEnum<Sorting>;
public: public:
RimCorrelationMatrixPlot(); RimCorrelationMatrixPlot();
~RimCorrelationMatrixPlot() override; ~RimCorrelationMatrixPlot() override;
@ -76,7 +85,7 @@ private:
private: private:
caf::PdmField<CorrelationFactorEnum> m_correlationFactor; caf::PdmField<CorrelationFactorEnum> m_correlationFactor;
caf::PdmField<bool> m_showAbsoluteValues; caf::PdmField<bool> m_showAbsoluteValues;
caf::PdmField<bool> m_sortByValues; caf::PdmField<SortingEnum> m_sortByValues;
caf::PdmField<bool> m_sortByAbsoluteValues; caf::PdmField<bool> m_sortByAbsoluteValues;
caf::PdmField<bool> m_excludeParametersWithoutVariation; caf::PdmField<bool> m_excludeParametersWithoutVariation;
caf::PdmField<bool> m_showOnlyTopNCorrelations; caf::PdmField<bool> m_showOnlyTopNCorrelations;